28

我正在尝试禁用列表视图上的多次单击事件,例如在按下第一次单击后,某些媒体会从 web 服务播放,而在播放时,其他项目需要clickable==false,在媒体播放后,其他列表项可以单击。

我正在尝试的是调用和setClickable(true)对象。setClickable(false)ListView

4

10 回答 10

70

在您的自定义 ArrayAdapter 覆盖 isEnabled 方法如下

@Override
public boolean isEnabled(int position) {
    return false;
}
于 2014-05-29T12:27:53.253 回答
36

使您自己的具有AreAllItemsEnabled () 返回 false 的 ArrayAdapter 子类,并定义isEnabled(int position)以在您要禁用的项目中为给定项目返回 false。

于 2013-04-19T07:23:00.060 回答
18

将此添加到 xml

android:listSelector="@android:color/transparent"
于 2013-11-19T05:22:27.433 回答
3

为该列表创建适配器,并覆盖此方法

public boolean isEnabled(int position);

然后false在您要禁用点击时返回

于 2014-05-15T12:14:32.773 回答
2

使用标志管理 Click 事件。

当您的媒体播放器运行时,使用此方法将 click 设置为 false。

setClickable(false);

当您的媒体播放器停止或未运行或完成时,将该标志设置为默认值。

 setClickable(true);
于 2013-04-20T04:39:11.320 回答
2

上面说的答案对我不起作用,所以我用list.setEnabled(false)它对我有用

于 2014-11-24T07:09:30.487 回答
2

在 onCreate 之前:

private long mLastClickTimeListViewItem = 0; 

防止多次单击 ListView 项

在listView的侦听器内创建onCreate之后,在我的例子中如下:

    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if (SystemClock.elapsedRealtime() - mLastClickTimeListViewItem < 1000){
                return ;
            }
            mLastClickTimeListViewItem = SystemClock.elapsedRealtime();

            //Do your remaining code magic below...
            ....
            ....

         } // end of onItemClick method   
    }); // end of setOnItemClickListner
于 2014-07-12T16:20:14.357 回答
2

listView.getChildAt(position).setEnabled(false);

listView.getChildAt(position).setClickable(false);

于 2021-01-21T19:15:24.820 回答
1

或者以简单的方式取消注册和注册OnItemClickListener可能是一个更好的主意。

于 2014-01-20T12:46:30.667 回答
-1

如果您想要的只是禁用可点击的项目并显示适当的选择器颜色,只需使用该行

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

在布局文件(xml)中的列表视图中

于 2014-12-29T21:46:06.653 回答