【发布时间】:2014-03-03 18:24:42
【问题描述】:
我一直在制作一个适用于 Android 中的 ListViews 的应用程序,但我无法使所选(被破解的)项目具有不同的背景。我正在使用 CHOICE_MODE_SINGLE。这是我的代码到目前为止的样子:
我使用的 ListView:
(在 layout.xml 内)
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:listSelector="@drawable/selector_test" >
</ListView>
我在适配器中使用的 TextView 布局:
(listItem.xml)
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="23sp"
android:textStyle="bold" />
这是我添加适配器的地方:
mListAdapter = new ArrayAdapter<String>(this, R.layout.listItem, mList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAuthorAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
String selected = mList.get(position);
// ...
mListView.setItemChecked(position, true);
}
});
我确信点击时会检查正确的项目,因为当我调用 getCheckedItemPosition() 时,它会返回正确的值。
现在,为了突出选中的项目,我尝试了两件事:
选择器可绘制:
(selector_test.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_longAnimTime">
<item android:state_checked="true"><shape>
<solid android:color="@color/red" />
</shape></item>
<item android:state_selected="true"><shape>
<solid android:color="@color/blue" />
</shape></item>
<item android:state_pressed="true"><shape>
<solid android:color="@color/green" />
</shape></item>
</selector>
我将它添加到 .xml 中:
android:listSelector="@drawable/selector_test"
背景可绘制:
(background_test.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/red" android:state_checked="true"/>
<item android:drawable="@color/blue" android:state_selected="true"/>
<item android:drawable="@color/green"/>
</selector>
我将它添加到 .xml 中:
android:background="@drawable/background_test"
我尝试将选择器和背景添加到 listView.xml 和 listItem.xml,但唯一改变的是默认背景颜色,以及当项目被按下(或按住)时选择器的颜色.
android:state_checked="true" 和 android:state_selected="true" 似乎什么也没做。
如果选择了视图,我可以通过覆盖 ArrayAdapter 中的 getView() 方法并在其中调用 setBackgroundColor() 来更改背景,它确实会更改背景,但也完全摆脱了选择器。此外,我真的不喜欢仅仅为了更改一行代码而重写类,特别是如果可以以不同的方式实现相同的事情。
所以我要问的是,有没有办法通过添加选择器或背景可绘制来突出显示 ListView 中选中的项目,我只是做错了,或者我必须以其他方式使其工作。
提前致谢! :)
【问题讨论】:
标签: android xml listview android-listview listadapter