我正在尝试禁用列表视图上的多次单击事件,例如在按下第一次单击后,某些媒体会从 web 服务播放,而在播放时,其他项目需要clickable==false
,在媒体播放后,其他列表项可以单击。
我正在尝试的是调用和setClickable(true)
对象。setClickable(false)
ListView
在您的自定义 ArrayAdapter 覆盖 isEnabled 方法如下
@Override
public boolean isEnabled(int position) {
return false;
}
使您自己的具有AreAllItemsEnabled () 返回 false 的 ArrayAdapter 子类,并定义isEnabled(int position)以在您要禁用的项目中为给定项目返回 false。
将此添加到 xml
android:listSelector="@android:color/transparent"
为该列表创建适配器,并覆盖此方法
public boolean isEnabled(int position);
然后false
在您要禁用点击时返回
使用标志管理 Click 事件。
当您的媒体播放器运行时,使用此方法将 click 设置为 false。
setClickable(false);
当您的媒体播放器停止或未运行或完成时,将该标志设置为默认值。
setClickable(true);
上面说的答案对我不起作用,所以我用list.setEnabled(false)
它对我有用
在 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
listView.getChildAt(position).setEnabled(false);
listView.getChildAt(position).setClickable(false);
或者以简单的方式取消注册和注册OnItemClickListener可能是一个更好的主意。
如果您想要的只是禁用可点击的项目并显示适当的选择器颜色,只需使用该行
android:listSelector="@android:color/transparent"
在布局文件(xml)中的列表视图中