在我的应用程序中,我使用列表视图来显示具有一个文本和一个图像的项目列表,我已将列表选择器属性添加到列表视图,以便任何列表项将被单击其背景颜色将是问题是,当列表项被选中时,列表视图的行(即文本视图和图像视图)背景不会改变,但是按下的状态工作正常。它会起作用吗? 任何帮助将不胜感激
列表视图
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:choiceMode="singleChoice"
android:divider="@null"
android:dividerHeight="0dp"
android:listSelector="@drawable/nav_lists_selector"
/>
列表选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@drawable/list_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/list_selected" android:state_selected="true" />
</selector>
列表按下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/clr_list_pressed"/>
</shape>
列出所选
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/clr_list_selected"/>
</shape>
答案 0 :(得分:1)
旧主题,但我遇到了同样的问题。出于某些奇怪的原因,android:state_selected="true"
和android:state_selected="false"
对我来说是逆转的。
最终起作用的是:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:drawable="@drawable/list_row_bg_selected"/>
<item
android:state_selected="true"
android:drawable="@color/colorWhite"/>
</selector>
所以现在唯一的问题是,为什么我必须反过来使用这两个值。
编辑:
想想我发现它为什么表现得很奇怪。
在我将用于列表视图的android:listSelector="@drawable/list_selector"
添加到android:background="@drawable/list_selector"
列表视图的项目视图后,android:state_selected="true"
和false
通常会在选择器中正常工作。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:orientation="horizontal">
<....some Textviews....>
/>
</RelativeLayout>
答案 1 :(得分:0)
您需要在列表选择器
中添加“正常状态”<item android:drawable="@drawable/normal_list_color_or_image" />
您已添加状态已选中并已按下,但未添加正常状态。
“正常状态”是指您的组件没有收到一个操作。
答案 2 :(得分:0)
在onItemclick
的{{1}}中,您可以获得所选项目的位置
Listview
在适配器的@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
selectedItem = position;
adapter.notifyDataSetChanged();
}
方法中,您可以更改带有项目的颜色
getView()
使用选择器尝试下面的代码
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == selectedItem) {
// Your desired color
}
return view;
}