如何在Android中使列表视图中的某一项不可点击

36

如何使列表视图中的项无法点击。我有主题和项目在一个列表视图中,但是对于主题和项目来说,视图都是相同的。项目是可点击的,但是主题不可点击。如何实现这个功能。

列表将如下所示:

Topic
item
Topic
item
item

主题。clickable(false)无效,请帮忙。


你尝试过可扩展的列表视图吗? - PedroAGSantos
7个回答

72

不知道你是否还需要,但你可以实现自己的适配器(Adapter),并覆盖isEnabled(int position)方法。根据项目的ViewType返回true或false。


通过覆盖方法启用并没有起作用,因为该方法从未被调用。 - AlikElzin-kilaka
@AlikElzin-kilaka 你能解释一下哪里出了问题吗?对我来说它完美地运行了,而且我认为这是最优雅的解决方案。 - Noya
4
这种方法可以防止列表项之间出现分隔线。相反,我在ListView的XML中设置了以下属性android:listSelector="@android:color/transparent",这对我很有效。 - Dick Lucas

58

分享我的经验,以下是解决方法(视图指列表项视图):

view.setEnabled(false);
view.setOnClickListener(null);
  • 通过覆盖该方法启用并未奏效,因为该方法从未被调用。
  • 将focusable设置为false也没有奏效。

4
我的解决方案的问题在于重新启用click事件。一旦你取消了click监听器,你就不知道ListView之前使用的监听器是什么。如果你想重新启用点击/选择选项,请参考isEnabled解决方案:http://developer.android.com/reference/android/widget/BaseAdapter.html#isEnabled(int) - AlikElzin-kilaka
我的程序在“setOnClickListener”处崩溃了。 - DesignIsLife

19

要使列表中的项目无法点击,您需要使适配器在列表中的项目上的isEnabled方法返回false。一种简单的实例化适配器并覆盖isEnabled的方法如下:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to, 0) {
    @Override
    public boolean isEnabled(int position) {
        return false;
    }
};

这种方法可以防止列表项之间显示分隔线。相反,我在ListView的XML中设置了以下属性android:listSelector="@android:color/transparent",这对我很有效。 - Dick Lucas

8

这是正确答案:

我看到了很多评论说

setEnabled(false)
setClickable(false)
setFocusable(false)

这个方法看起来可行,但答案是否定的NO

唯一的解决办法是执行以下操作:

view = inflater.inflate(R.layout.row_storage_divider, parent, false);
view.setOnClickListener(null);

5

在ListView中将listSelector设置为透明

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

1
在你的 ListView 中添加以下属性。
android:cacheColorHint = "#00000000"

1
在您的适配器中,您需要添加以下内容:

view = inflator.inflate(R.layout.items_menu_header, null);    
view.setOnClickListener(null);

我使用布尔值来识别标题或项目,因此为每种类型分配不同的布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接