0

我正在开发板球应用程序。我的目标是在 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"
   />

现在我的问题是当用户从列表中选择特定播放器时,我想更改列表视图的颜色。它喜欢向用户显示选择了哪些玩家。为了与未选择的玩家区分开来,我将选定玩家的颜色更改为红色。

    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

4 回答 4

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"
    />

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

            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);        
            }
        }
    });

它解决了我的问题..

于 2013-04-04T09:02:34.917 回答
1

您必须使用 statelist drawable 来定义事件的背景,并且为了方便起见,这是一个非常相似的问题,可能会对您有所帮助。 列表显示

于 2013-04-04T05:15:20.917 回答
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 设置 Selector,如下所示:

<ListView 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:listSelector="@drawable/listitem_selector"
   />
于 2013-04-04T05:38:52.907 回答
0

问题是不可能通过简单的适配器(您已经使用过)来做到这一点。

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

按照本教程

于 2013-04-04T05:42:28.407 回答