如何禁用在android中单击ListView?
Posted
技术标签:
【中文标题】如何禁用在android中单击ListView?【英文标题】:How to disable clicking on ListView in android? 【发布时间】:2012-10-20 05:52:13 【问题描述】:我有一个 ListView,我用我的数据库中的值填充。如果数据库为空,我将 ListView 的第一项设置为“无数据”。我想禁用单击此项目。我用过 ArrayAdapter。我尝试将 areAllItemsEnabled,isEnabled 设为 false,但没有用。即使我将 ListView 的 isClickable 和 setEnabled 设置为 false,也没有用。我将 OnItemClickListener 的代码放在 else 条件中,即使这样也不会阻止列表项可点击。有人有替代解决方案吗?谢谢!
【问题讨论】:
【参考方案1】:在您的自定义 ArrayAdapter 中使用 isEnabled 函数返回 false:
@Override
public boolean isEnabled(int position)
return false;
总是为我工作。
【讨论】:
禁用后如何重新启用? 我建议您在此处放置一个标志,并在需要时更改该标志。 它工作正常。我们已经在 java 的 listAdapter 类中添加了这段代码。 这对我不起作用。但这个答案:***.com/a/2908499/956975 确实对我有用。 只是为了详细说明 yahya,只需使用标志。在您的适配器中创建一个带有布尔参数的小函数。在适配器内设置一个全局变量,然后将其用作您的标志。这是一个非常好的解决方案。干得好耶 :)【参考方案2】:一切都变得更简单了! list.setEnabled(false)
【讨论】:
糟糕!这可以防止滚动。【参考方案3】:您可以将空视图设置为显示,它将自动处理:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
android:paddingLeft="8dp"
android:paddingRight="8dp">
<ListView android:id="@android:id/list"
android:layout_
android:layout_
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextView android:id="@android:id/empty"
android:layout_
android:layout_
android:background="#FF0000"
android:text="No data"/>
</LinearLayout>
【讨论】:
这应该是公认的答案!它不仅回答了问题,而且还提出了一种处理空列表的更好方法!【参考方案4】:尝试在 ListView 上设置这两个属性:
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
【讨论】:
【参考方案5】:为该列表创建适配器,并覆盖此方法
public boolean isEnabled(int position);
然后当你想禁用点击时返回false
【讨论】:
【参考方案6】:也许您可以使用 if 语句来检查 OnClick 中的列表视图条目的内容,如果它包含“无数据”则什么也不做,否则照常进行
【讨论】:
【参考方案7】:我根据我的要求做了这个,希望它可以帮助你一些方法
@Override
public boolean isEnabled(int position)
if(data.get(position).isClickable==false)
return false;
return super.isEnabled(position);
【讨论】:
以上是关于如何禁用在android中单击ListView?的主要内容,如果未能解决你的问题,请参考以下文章