如何设置 ListView 不可点击

37

我有一个ListView,它只需要显示数据。
所以我不想让它可点击。
首先我尝试将XML listview更改为:

我有一個ListView,只需要顯示數據。
所以我不想讓它可以點擊。
首先我嘗試將XML listview更改為:

<ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:clickable="false" >

但它没有起作用。
所以为了解决我的问题,我通过代码进行了设置:

  list.setSelector(android.R.color.transparent); 

但我不相信没有更好的解决方案。有什么想法吗?


4
方法一: ListView.setOnClickListener(null); 或者添加 android:focusable="false" android:focusableInTouchMode="false",或者在布局中添加 android:listSelector="@android:color/transparent" - g00dy
我认为clickable属性只是为视图设置此属性。如果您想将项目设置为不可点击,则应将它们的clickable属性设置为false。希望这可以帮助到您。 - ZeusNet
@g00dy请回复您的评论,这样我就可以将其设置为已接受的答案。 - Tizianoreica
可能是重复的问题:Android:禁用ListView点击时的高亮 - aleb
14个回答

57

这里是代码,跟随注释:

一种方法是:ListView.setOnClickListener(null); 或者

您可以添加 android:focusable="false" android:focusableInTouchMode="false" 或者

另一种方式是在布局中使用 android:listSelector="@android:color/transparent"

干杯。


6
每次使用 "list.setOnClickListener(null)" 都会出现错误,但是 "list.setOnItemClickListener(null);" 却完美地运行。 - Aritra Roy

55

只需在你的适配器中覆盖 isEnabled(position) 方法并返回 false。

@Override
public boolean isEnabled(int position) {
    return false;
}

谢谢!非常棒且简单的解决方案。 - resource8218
1
这个方法可以防止列表项之间显示分隔线。相反,我在ListView的XML中设置了以下属性android:listSelector="@android:color/transparent",这对我有用。 - Dick Lucas
如何使用 BaseAdapter 实现它 @Arun - Prabs
也许你应该重写 areAllItemsEnabled() 方法并返回 false。否则,isEnabled 方法可能没有效果。 - Ferran Maylinch

12

覆盖下面的方法。返回 false 表示所有项目都不可点击。

 @override
  public boolean areAllItemsEnabled() {
    return false;
  }

重写下面的方法以返回哪个项目不可点击

public boolean isEnabled(int position) {
    if(position == your_item_pos) {
          return false;
    }
    return true;
}

我应该把这个方法放在哪里? - Tizianoreica
在你的适配器类中。 - Sunil Kumar
@Override public boolean areAllItemsEnabled() { return false; } - Uriel Frankel
这种方法可以防止列表项之间显示分隔线。相反,我在ListView的XML中设置了以下属性android:listSelector="@android:color/transparent",这对我很有效。 - Dick Lucas

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

它将被点击的颜色更改为与未被点击时相同的颜色!这样它就像普通文本一样出现...这是一个解决方法。


1
or listView1.setSelector(android.R.color.transparent); - Serhii Nadolynskyi

2

只需在您的适配器类中复制此方法。 没有什么要做的......

@Override
public boolean isEnabled(int position) {

    return false;
}

您可以设置任何条件使某些选定的项目无法点击。
@Override
public boolean isEnabled(int position) {
    //Y for non clickable item
      if(data_list.get(position).equalsIgnoreCase("Y"))
        {
            return false;
        }
    return true;
}

1
你可以使用

标签。

yourListView.setOnItemClickListener(null);

1

简单的方法:

listView.setSelector(android.R.color.transparent);

1
android:focusable="true"

现在无法单击列表视图中的任何项目。


1
只需将 android:enabled="false" 设置为 listview,即可解决问题。为什么要不必要地重写方法呢?

完美的答案! - hidd
这也禁用了滚动功能。 - Bms270

0
实际上,@override isEnabled() 和 setOnClickListener(null)、setClickable(false)、setLongClickable(false) 对我来说都不起作用。我通过重写 performItemClick 方法来解决这个问题。
@Override
public boolean performItemClick(View view, int position, long id) {
 if(!clickAble){
     return false;
 }
    return super.performItemClick(view,position,id);
}

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