列表选择器状态选择不起作用[ANDROID]

时间:2017-03-28 11:27:29

标签: android listview selector listviewitem

在我的应用程序中,我使用列表视图来显示具有一个文本和一个图像的项目列表,我已将列表选择器属性添加到列表视图,以便任何列表项将被单击其背景颜色将是问题是,当列表项被选中时,列表视图的行(即文本视图和图像视图)背景不会改变,但是按下的状态工作正常。它会起作用吗? 任何帮助将不胜感激

列表视图

<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>

3 个答案:

答案 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;
}