【问题标题】:Deselect selected item in ListView取消选择 ListView 中的选定项目
【发布时间】:2013-07-19 00:52:46
【问题描述】:

我在布局中使用ListView,如下所示:

 <ListView android:id="@+id/list"
              android:layout_width="fill_parent"
              android:layout_gravity="center"
              android:layout_height="match_parent"
              android:layout_weight="0.7"
              android:layout_marginTop="5dp"
              android:orientation="vertical"
              android:layout_centerInParent="true"
              android:divider="@color/dark_grey"
              android:drawSelectorOnTop="false"
              android:focusable="true"
              android:layout_marginBottom="55dp"
              android:cacheColorHint="#00000000"
              android:listSelector="@color/light_grey"
              android:dividerHeight="1px" />

选择器很好用,但我怎样才能禁用选择器?

我试过了:

listView.clearChoices();
listView.setSelected();
listView.setSelector();
...

还有一些其他的东西,但没有任何效果。有什么想法可以让我选择的项目恢复正常吗?不会这么复杂吧?

编辑:我需要一个编程解决方案!

谢谢!

【问题讨论】:

标签: android android-layout android-listview android-selector


【解决方案1】:

clearChoices() 之后拨打ListView 上的requestLayout()。它会起作用的。

【讨论】:

  • 对我来说,它在 clearChoices() 之后与 adapter.notifyDataSetChanged() 一起工作
  • 对我来说,在 adapterObject.notifyDataSetChanged () 之后使用 listviewObject.clearChoices ()
  • adapter.notifyDataSetInvalidated() 适用于 ExpandableListView
  • 让我们热一下这个话题。我试图在 ActionMode.Callback 的 onDestroyActionMode 方法中使用它并且不起作用。唯一可见的变化发生在调用 listView.setAdapter(myAdapter);但它意外地将屏幕重新定位到顶部。
【解决方案2】:

正如上面提到的@Muerte,执行以下操作对我有用:

myListView.clearChoices();
myAdapter.notifyDataSetChanged();

这似乎比重新绘制整个布局要好。

【讨论】:

  • 对我来说,在 adapterObject.notifyDataSetChanged () 之后使用 listviewObject.clearChoices ()
【解决方案3】:

对我来说,它适用于:

listView.setAdapter(myAdapter);

【讨论】:

  • 谢谢。在尝试了这么多不同的方式之后,这终于对我有用了。
  • 这对我有用。所有其他建议均无效。我不确定他们为什么不这样做,但可能是因为我在 onItemClick() 处理程序中调用了 myAdapter.notifyDataSetChanged()。
  • 此解决方案的缺点是列表将重新创建,将屏幕定位到顶部。有时可能很烦人。
【解决方案4】:

在您声明 ListView 使用的 XML 中:

<ListView android:id="@+id/my_list" android:listSelector="#00000000" />

【讨论】:

  • 是的,但我希望我的选择器在下次单击列表项时再次工作......如果我这样做,那么选择器是不可见的,对吧?
  • 哦,也许this 可以帮忙..
【解决方案5】:

点击后可以设置选择器:

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/transparent_white" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="false" android:state_pressed="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="true"/>
<item android:drawable="@drawable/transparent_white" android:state_focused="false"/>

@drawable/transparent_white 是 #00ffffff

【讨论】:

    【解决方案6】:

    试试这个

    像这样创建自己的选择器 xml 文件

    YourSelector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_enabled="false" android:state_focused="true"
            android:drawable="@drawable/item_disabled" />
      <item android:state_pressed="true"
            android:drawable="@drawable/item_pressed" />
      <item android:state_focused="true"
            android:drawable="@drawable/item_focused" />
    </selector>
    

    查看此链接

    here

    【讨论】:

      【解决方案7】:

      没有任何解决方案实际上对我有用。我的列表视图用于列出搜索的项目,并提供重做搜索的规定。在得到结果后,我添加了以下代码 sn-p 并且它起作用了:)

      myAdapter.setSelectedIndex(-1);

      【讨论】:

      • 您的 myAdapter 是什么类型的?对于 ListView 和 ArrayAdapter,我都找不到这个方法。
      【解决方案8】:

      您的选择器资源在这里似乎是错误的。您应该使用具有透明背景的drawable,我认为这实际上是为您的行着色,但不是ListViewchoiceMode。请查看this另一个答案了解更多详情。

      【讨论】:

        猜你喜欢
        • 2015-10-19
        • 1970-01-01
        • 2011-07-02
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多