【问题标题】:Android: disable ListView selectionAndroid:禁用 ListView 选择
【发布时间】:2011-06-04 13:56:02
【问题描述】:

我有一个 listView,当用户选择一个项目时,我会重新显示正确答案并突出显示。但是,那时我想禁用列表视图项的选择;用户只能通过按下按钮进入下一个问题。但是,即使我像这样禁用项目:

   private void disableItemSelection() {
        ListView lv = getListView();
        for (int i = 0; i < lv.getChildCount(); i++){
            View v = lv.getChildAt(i);
            v.setEnabled(false);
        }
    }

...当用户选择它时,它仍然会突出显示选择。有什么想法吗?

【问题讨论】:

  • 你找到解决办法了吗?
  • 否 - 我做了一个解决方法,如果他们再次尝试选择按钮,我会将他们带到下一个问题。

标签: android listview


【解决方案1】:

滚动被锁定的原因是因为你在设置

ListView

我找到了一种在不锁定滚动条的情况下禁用突出显示的方法。您需要在 ListAdapter 中进行设置,如下所示:

ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
           public boolean isEnabled(int position) 
            { 
                    return false; 
            } 
        };

【讨论】:

  • 如果你不想,你不需要使用 ArrayAdapter。只需在您自己的自定义适配器上覆盖 isEnabled 方法,您就可以开始了!
  • 不是说如果有禁用状态的行的drawable,它也会改变它们的图像吗?是否可以禁用单击但不更改可绘制对象?
【解决方案2】:

您可以将属性添加到 Listview XML 布局以禁用多个高亮行

android:listSelector="@android:color/transparent"               
android:cacheColorHint="@android:color/transparent"

【讨论】:

  • 我认为这是最好的答案,总是最好在xml中设置这个细节而不是在代码中。
  • 对我来说设置listSelector就足够了。
【解决方案3】:

我只是用这个隐藏了选定的项目:

listView.setSelector(new ColorDrawable(0));

然后你通过恢复它之前使用的任何可绘制对象再次显示它:

wifiSsid.setSelector(R.drawable.listview_selector);

【讨论】:

    【解决方案4】:

    我使用了 android:choiceMode="none" 记录的here

    【讨论】:

    • 这仅设置列表项是否可以具有选定模式,而不是突出显示:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2017-07-15
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多