- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在制作一个与 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"似乎什么都不做。
如果选择了 View ,我可以通过重写 ArrayAdapter 中的 getView() 方法并在其中调用 setBackgroundColor() 来更改背景,它确实更改了背景,但也完全摆脱了选择器。此外,我真的不喜欢仅仅为了更改一行代码而重写类,尤其是如果可以用不同的方式实现同样的事情。
所以我想问的是,有没有一种方法可以通过向其添加选择器或背景可绘制对象来突出显示 ListView 中的选中项目,而我只是做错了,或者我必须以其他方式使其工作。
提前致谢! :)
最佳答案
在你的 Activity 开始时添加这一行
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
其中 lv 是 listView 的实例
然后覆盖此方法并向其添加以下行。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Set the item as checked to be highlighted
lv.setItemChecked(position, true);
v.setBackgroundColor(Color.BLUE);
conversationAdapter.notifyDataSetChanged();
}
然后在自定义适配器的 getView 方法中将先前选择的项目的背景颜色更改回正常颜色
关于android - 在 Android 上的 ListView 中突出显示所选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154358/
有没有一种方法可以“标记”对象的属性,使它们在反射中“突出”? 例如: class A { int aa, b; string s1, s2; public int AA
我是一名优秀的程序员,十分优秀!