listView项目在点击后保持突出显示

时间:2016-05-09 04:06:29

标签: android listview

我有ListView我希望点击的项目有背景颜色来指示当前选择的项目。 我通过指定选择器字段

实现了这一点
<ListView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:id="@+id/sub_arguments_listView"
    android:layout_weight="1"
    android:listSelector="@drawable/list_selector"
    android:choiceMode="singleChoice"
    android:clickable="true"/>

list_selector.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/seperator_color" />
    <item android:state_focused="true" android:drawable="@color/seperator_color" />
    <item android:state_activated="true" android:drawable="@color/seperator_color" />
    <item android:state_selected="true" android:drawable="@color/seperator_color" />
    <item android:state_active="true" android:drawable="@color/seperator_color" />
    <item android:drawable="@color/seperator_color" />
</selector>

我添加了ListView.onItemClickListener()

 public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
   String text ="sometext";
    ((TextView)mMainView.findViewById(R.id.sub_argument_text)).setText(text);
}

只要变量“text”的内容很短,这就可以正常工作。 我遇到的问题是,当变量“text”的内容是长文本时,TextView被更新正常,但ListView中的所选项目将松开背景(返回透明)某种原因(我的猜测是失去了焦点)。如果我再次单击相同的项目,则背景将保留,项目仍会突出显示。 另请注意,我有两个Android设备:

  1. Marshmallow 5.0 ,这是一个快速设备。我没有看到这个问题。
  2. 第二个是 4.2 和相对较慢的设备,显示此问题。
  3. 我错过了什么?如何使listView中单击的项目始终保持高亮显示,直到单击另一个项目为止?

    由于

2 个答案:

答案 0 :(得分:2)

试试这个,

 public void onItemClick(AdapterView<?> parent, View view, int position, long id)
     {

       listView.setItemChecked(position, true);

     }

这可能对你有所帮助。

答案 1 :(得分:1)

您可以尝试此示例...

Android ListView. How to change background color of manually selected item

也可以看到这个答案

Change background color of selected item on a ListView

在您的代码中

listView.setOnItemClickListener(new OnItemClickListener() {

     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) {
         view.setSelected(true);
         ...
     }
}