将listview中的第一项设置为android的默认值

Posted

技术标签:

【中文标题】将listview中的第一项设置为android的默认值【英文标题】:Setting the first item in the listview as default for android 【发布时间】:2014-05-26 22:26:44 【问题描述】:

我已经尝试在网上寻找一个好的解决方案,但我似乎找不到。

有一个帐户列表视图。所选帐户的背景颜色为浅蓝色,但仅在按下时才会显示。这是我从中获取代码的地方:android ListView selected item stay highlighted

在 onCreate 方法中,我有一个 onItemClickListener 方法,如果我执行 listview.setSelection(0);在 onItemClick 方法之上,默认项是列表视图中的第一项。系统知道列表中的第一个帐户是当前选择的项目,但我如何直观地显示它?

基本上,我想以某种方式执行 view.setSelected(true);列表视图中的第一项。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            public void onItemClick(AdapterView<?> parentAdapter,
                    View view, int position, long id) 
                view.setSelected(true);
                Account account= accounts.get(position);
                accountNumber = account.getAccountNumber();
            
        );

谢谢!

编辑:这是我们自定义适配器的 getView

public final View getView(int position, View convertView, ViewGroup parent) 
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    rowView = inflater.inflate(rowResourceId, parent, false);
    textView = (TextView) rowView.findViewById(R.id.textView);
    textView.setTextColor(Color.BLACK);
    textView.setText(objects.get(position).debug());
    return rowView;

【问题讨论】:

查看此链接我认为有帮助-***.com/questions/18099756/… 我看过了,这不是我想要的... 【参考方案1】:

正确的方法是使用自定义数组适配器并覆盖 getView 方法。对于第一个项目,您将设置背景:

public final View getView(int position, View convertView, ViewGroup parent) 

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    rowView = inflater.inflate(rowResourceId, parent, false);

    if(position == 0)
        //you might remove this check if your develop for new api's only
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) 
            rowView.setBackgroundDrawable();
         else 
            rowView.setBackground();
        
    

    textView = (TextView) rowView.findViewById(R.id.textView);
    textView.setTextColor(Color.BLACK);
    textView.setText(objects.get(position).debug());

    return rowView;

在此处阅读更多相关信息:Vogella - Using lists in android 此解决方案可能比强制选择更好。如果选择是由用户执行的操作,您实际上只想突出显示第一行,因此请在您的 get view 方法中对其进行操作。

【讨论】:

但是请看,我的 view.setSelected 负责为我更改背景颜色……我们正在使用自定义适配器。我现在将发布当前 getView 的代码。 @user1883614 对,不要强制选择,在您的 getView 方法中,您可以尝试我在回答中建议的方法,为位置 0 设置背景 什么是行布局?获取资源()?和drawable.ready?抱歉,eclipse 将这些标记为错误... 嗯,几乎成功了!谢谢!我会多尝试一下,让它完全符合我的需要。 想通了,但我不能发布几个小时,但我会发布我的解决方案!谢谢!【参考方案2】:

所以我在代码方面作弊并对其进行了硬编码,但它现在可以工作了!

对于自定义适配器中的getView:

if (position == 0) 
        textView.setBackgroundColor(Color.rgb(173, 211, 224));

在实际activity的onCreate方法中,对于setOnItemClickListener:

if (position != 0) 
View rowView = listview.getChildAt(0);
    TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(227, 236, 239));
 else 
    View rowView = listview.getChildAt(0);
    TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(173, 211, 224));

【讨论】:

以上是关于将listview中的第一项设置为android的默认值的主要内容,如果未能解决你的问题,请参考以下文章

ListView 仅显示数组列表中的第一项

如何禁用在android中单击ListView?

如何使 ListView 的第一项在启动时被选为默认值?

浓缩咖啡:单击 ViewPager 内 ListView 中的第一项

Espresso 如何点击一个 ImageView 放置在 listview 的第一项?

Android:ListView 仅显示第一项。 (请参考提供的图片)