我正在尝试让我的应用程序在2.3中正常工作(它在4.0+中工作正常)而我遇到的一个问题是在我的listview上我无法获得所选项目的背景更改。我不确定我需要改变什么 - 有人知道吗?
这是listview本身:
<ListView
android:id="@+id/score_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/keyboard"
android:layout_below="@+id/sort_header"
android:choiceMode="singleChoice"
android:divider="#CCCCCC"
android:dividerHeight="1dp"
android:listSelector="@drawable/selector" />
这是在4.0+中工作的选择器(在2.3中没有颜色变化):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/highlight"/>
<item android:state_pressed="true" android:drawable="@color/highlight"/>
<item android:state_activated="true" android:drawable="@color/highlight"/>
<item android:state_selected="true" android:drawable="@color/highlight"/>
</selector>
我实际上并不需要所有4个,但我想尝试一切。
答案 0 :(得分:7)
我有完全相同的问题。我还没有找到如何在XML中执行此操作的方法,但我在代码中找到了一种解决方法。以下代码在支持API级别7 +
的应用程序中进行了测试首先,您需要稍微更改ListView
的适配器:
public class ListViewAdapter extends BaseAdapter {
private int selectedItemPosition = -1;
// your code
public void selectItem(int i) {
selectedItemPosition = i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
// your code
if (i == selectedItemPosition) {
// set the desired background color
textView.setBackgroundColor(context.getResources().getColor(R.color.highlight));
}
else {
// set the default (not selected) background color to a transparent color (or any other)
textView.setBackgroundColor(Color.TRANSPARENT);
}
return view;
}
}
接下来,您必须通知适配器OnItemClickListener
的{{1}}中的选择已更改:
onItemClickMethod
那应该是它。现在,无论何时您不想更改所选项目,您都可以使用@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// select the item
((ListViewAdapter) listview.getAdapter()).selectItem(position);
// force redraw of the listview (invalidating just "view" is not enough)
((ListView) parent).invalidateViews();
// your code
}
中使用的相同代码,即。 onItemClick()
后跟selectItem()
。
invalidateViews()
。
此外,您还应该在列表视图中添加适当的listSelector,以避免在单击项目时短暂闪烁默认选择器。但是,当整个视图的背景发生变化时,API 7和8上的列表选择器存在错误。您可以找到解决方法here
答案 1 :(得分:1)
尝试在listview android:cacheColorHint="@null
中设置媒体资源。列表视图背景不会被触摸高亮。
答案 2 :(得分:0)
android:state_activated
在API级别11中引入。
请参阅此链接Drawable Resources
<强>更新强>
我在我的应用中使用此功能(API级别8)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selector style for listrow -->
<item
android:state_selected="false"
android:state_pressed="false"
android:state_focused="false"
android:drawable="@color/normal"/>
<item android:state_pressed="true"
android:drawable="@color/highlight"/>
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/highlight"/>
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@color/highlight"/>
</selector>
答案 3 :(得分:0)
正如在AwdKab响应中所写,android:state_activated
是在API级别11中引入的。解决方案是为列表项布局的顶部Checkable
实现View
接口,请参阅我的{ {3}}