我正在为板球开发一个应用程序。我的目标是为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);
}
}
});
如何将所选播放器的颜色从默认颜色更改为红色。我很难做到这一点..请帮我找出来..
答案 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
并更改其属性。