【问题标题】:How to disable clicking on ListView in android?如何禁用在android中单击ListView?
【发布时间】:2012-10-20 05:52:13
【问题描述】:

我有一个 ListView,我用我的数据库中的值填充。如果数据库为空,我将 ListView 的第一项设置为“无数据”。我想禁用单击此项目。我用过 ArrayAdapter。我尝试将 areAllItemsEnabled,isEnabled 设为 false,但没有用。即使我将 ListView 的 isClickable 和 setEnabled 设置为 false,也没有用。我将 OnItemClickListener 的代码放在 else 条件中,即使这样也不会阻止列表项可点击。有人有替代解决方案吗?谢谢!

【问题讨论】:

    标签: android listview clickable


    【解决方案1】:

    在您的自定义 ArrayAdapter 中使用 isEnabled 函数返回 false:

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

    总是为我工作。

    【讨论】:

    • 禁用后如何重新启用?
    • 我建议您在此处放置一个标志,并在需要时更改该标志。
    • 它工作正常。我们已经在 java 的 listAdapter 类中添加了这段代码。
    • 这对我不起作用。但这个答案:stackoverflow.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_width="match_parent"
             android:layout_height="match_parent"
             android:paddingLeft="8dp"
             android:paddingRight="8dp">
    
         <ListView android:id="@android:id/list"
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:background="#00FF00"
                   android:layout_weight="1"
                   android:drawSelectorOnTop="false"/>
    
         <TextView android:id="@android:id/empty"
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   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);
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-14
            • 2014-10-20
            • 2016-10-15
            • 2013-03-30
            • 1970-01-01
            • 2011-09-17
            • 2018-11-12
            • 1970-01-01
            相关资源
            最近更新 更多