设置ListView项目的颜色

时间:2013-07-03 19:35:26

标签: android

我正在尝试将某些ListView项目(如电话号码和电子邮件地址)的颜色单独设置为蓝色,以便用户知道它们是可点击的。这是一个片段,但实现此功能根本不能正常工作,列表项会在滚动列表时随机更改颜色。

    List<Map<String, String>> data = new ArrayList<Map<String, String>>();

    //...add data to list

    SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.simple_list_item_2_custom, new String[] { LABEL, VALUE },
        new int[] { R.id.text1, R.id.text2 })
    {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            LinearLayout view = (LinearLayout)super.getView(position, convertView, parent);

            String label = data.get(position).get(LABEL);

            if (label.equals("Email Address"))
            {
                ((TextView)view.getChildAt(0)).setTextColor(Color.BLUE);
            }

            return view;
        }
    };

这是定义列表项的LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:orientation="vertical" >
    <TextView android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
        android:layout_marginTop="8dip"
        android:textAppearance="?android:attr/textAppearanceSmall" />
    <TextView android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignStart="@android:id/text1"
        android:textAppearance="?android:attr/textAppearanceListItem" />
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

你错过了“if(label.equals(”电子邮件地址“))”

的其他内容

当它不是电子邮件地址时,您必须放置另一种文字颜色,如下所示: ((的TextView)view.getChildAt(0))setTextColor(Color.WHITE);

原因是因为Android适配器重新使用不久显示的旧行,在这种情况下是您已定义为蓝色的行。