如何在不使用选择器的情况下将ListView所选项目颜色从默认更改为红色

时间:2013-04-04 05:08:20

标签: android android-listview

我正在为板球开发一个应用程序。我的目标是为ListView中的特定团队选择玩家。在这里,我可以从列表中选择多个玩家。我正在使用简单的适配器和多选Listview。

          adapter=new ArrayAdapter<String>(this,R.layout.custom_list_view,R.id.textView_color,playersName);
    lvview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

我正在使用checkedTextView进行多项选择。下面是我的带CheckedTextView的custom_list_view

       <CheckedTextView
   android:id="@+id/textView_color"
   android:layout_width="fill_parent"
   android:layout_height="?android:attr/listPreferredItemHeight"
   android:textAppearance="?android:attr/textAppearanceLarge"
   android:gravity="center_vertical"
   android:checkMark="?android:attr/listChoiceIndicatorMultiple"
   android:paddingLeft="6dip"
   android:paddingRight="6dip"
   android:textColor="#FFffFF"
   />

现在我的问题是,当用户从列表中选择特定播放器时,我想要更改listview的颜色。它向用户显示选择了哪些玩家。要区别于未选中的播放器,我将所选播放器的颜色更改为红色。

    lvview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int position,long id) {
            // TODO Auto-generated method stub
            SparseBooleanArray checked = lvview.getCheckedItemPositions();      

            if(checked.get(position))
            {
                //chkTextView.setTextColor(Color.GREEN);

                counter_selected++;
                selectedCounterText.setText("" + counter_selected);                 
            }
            else
            {
                counter_selected--;
                selectedCounterText.setText("" + counter_selected);
            }
        }
    }); 

如何将所选播放器的颜色从默认颜色更改为红色。我很难做到这一点..请帮我找出来..

4 个答案:

答案 0 :(得分:2)

使用以下代码获得答案

在mainActivity适配器类

   adapter=new ArrayAdapter<String>(getApplicationContext(), R.layout.text_view,R.id.textView1,players);

    lvview.setAdapter(adapter);

main.xml如下所示

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="8.5"
    android:cacheColorHint="#00000000" 
     />

我的自定义布局字段如下所示

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="23dp"
    android:text="TextView"
    android:textColor="#ffffff" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView1"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignParentRight="true"
    android:focusable="false"
  android:focusableInTouchMode="false"
    />

在MainActivity onitem中单击ListView的监听器我调用了自定义布局视图,代码如下:

            lvview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> l, View v, int position,
                long id) {
            // TODO Auto-generated method stub
            SparseBooleanArray checked = lvview.getCheckedItemPositions();  
            checkedText=(CheckBox) v.findViewById(R.id.checkBox1);
            checkedList=(TextView) v.findViewById(R.id.textView1);
            if(checkedText.isChecked()==false)
            {
                counter_selected++;
                checkedText.setChecked(true);
                checkedList.setTextColor(Color.RED);
                selectedCounterText.setText("" + counter_selected);                 

            }
            else
            {
                counter_selected--;
                checkedText.setChecked(false);
                 checkedList.setTextColor(Color.WHITE);
                 selectedCounterText.setText("" + counter_selected);        
            }
        }
    });

它解决了我的问题..

答案 1 :(得分:1)

你必须使用statelist drawable来定义事件的背景,并且为了方便这里是一个非常相似的问题,可能对你有所帮助。 listview

答案 2 :(得分:0)

首先,您可以按如下方式定义选择器xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/red" />
    <item android:drawable="@drawable/listitem_normal" />
</selector>

然后你可以使用 android:listSelector =“@ drawable / listitem_selector”为ListItem设置选择器,如下所示:

<ListView 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:listSelector="@drawable/listitem_selector"
   />

答案 3 :(得分:0)

问题是无法通过简单的适配器(您已使用过)来实现。

您需要定义自定义行项目。您需要为绑定到列表视图的每个列表项定义自定义XML布局。因此,您需要创建一个customAdapter方法getView()。在其中,您可以轻松获取行的子TextView并更改其属性。

Follow this tutorial