【问题标题】:How set ListView not clickable如何设置 ListView 不可点击
【发布时间】:2013-07-30 12:14:08
【问题描述】:

我有这个 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); 

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

【问题讨论】:

  • 一种方式:ListView.setOnClickListener(null); 或添加android:focusable="false" android:focusableInTouchMode="false" 或添加布局android:listSelector="@android:color/transparent"
  • 我认为 clickable 属性只为视图设置了这个属性。如果您想将项目设置为不可点击,您应该将其可点击属性设置为 false。希望这会有所帮助
  • @g00dy 只需回复您的评论,以便我可以设置为已接受的答案

标签: android android-listview clickable android-selector


【解决方案1】:

在这里,在评论之后:

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

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

布局中的另一种方式android:listSelector="@android:color/transparent"

干杯。

【讨论】:

  • list.setOnClickListener(null) 每次都给我一个错误,但是 list.setOnItemClickListener(null);完美运行。
【解决方案2】:

只需覆盖适配器中的 isEnabled(position) 并返回 false

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

【讨论】:

  • 谢谢!伟大而简单的解决方案
  • 此方法防止分隔线显示在我的列表项之间。相反,我在 ListView android:listSelector="@android:color/transparent" 的 XML 中设置了以下属性,它对我有用。
  • 如何使用BaseAdapter@Arun
  • 也许你应该覆盖areAllItemsEnabled() 并返回false。否则isEnabled方法可能无效。
【解决方案3】:

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

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

并覆盖下面的方法以返回不可点击的项目

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

【讨论】:

  • 这个方法应该放在哪里?
  • 在你的适配器类中
  • 它的@Override public boolean areAllItemsEnabled() { return false; }
  • 此方法防止分隔线显示在我的列表项之间。相反,我在 ListView android:listSelector="@android:color/transparent" 的 XML 中设置了以下属性,它对我有用。
【解决方案4】:
android:listSelector="@android:color/transparent"

它将点击时的颜色更改为与未点击时相同! 所以它看起来好像是纯文本......这是一种解决方法。

【讨论】:

  • 或 listView1.setSelector(android.R.color.transparent);
【解决方案5】:

只需将此方法复制到您的适配器类中即可。 无事可做……

@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;
}

【讨论】:

    【解决方案6】:
    android:focusable="true"
    

    现在列表视图中的任何项目都无法点击

    【讨论】:

      【解决方案7】:

      你可以使用

      yourListView.setOnItemClickListener(null);
      

      【讨论】:

        【解决方案8】:

        只需将 android:enabled="false" 设置为列表视图,它就可以解决问题..为什么要继续覆盖不必要的方法..

        【讨论】:

        • 完美答案!
        【解决方案9】:

        简单的方法:

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

        【讨论】:

          【解决方案10】:

          试试这个代码

          Adapter.getView()

          i.setOnClickListener( null );
          i.setLongClickable( false );
          i.setClickable( false );
          

          【讨论】:

          • 我想通过 XML 设置所有内容,我不敢相信我需要通过代码来管理它
          • @AntonioCalì 安卓初学者常见的陷阱。
          【解决方案11】:

          事实上, @override isEnabled() 和 setOnClickListener(null) 可点击(假) setLongClickable(假) 没有为我工作。 我通过覆盖 performItemClick 来解决它

          @Override
          public boolean performItemClick(View view, int position, long id) {
           if(!clickAble){
               return false;
           }
              return super.performItemClick(view,position,id);
          }
          

          【讨论】:

            【解决方案12】:

            这是因为您的 ListView 项目可能具有可聚焦或可点击的元素,请在 XML 布局文件或代码中尝试以下方法:

            1. 将此属性添加到 ListItem XML 文件的根 ViewGroup 元素(即 LinearLayout、RelativeLayout...):

              android:descendantFocusability="blocksDescendants"

            2. 将此行添加到您的 List Adapter 方法中,该方法负责创建/回收列表项(很可能是 getView()newView()),而 parent 是列表项的 ViewGroup:

              parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

            【讨论】:

              【解决方案13】:

              我有一个只需要显示数据的 ListView。所以我不想让它可点击。

              我已经在我的一个项目中做到了这一点,下面的示例工作正常。

              基本上,您只需要:

              • 一个数据源(例如ArrayList)
              • ListView 小部件
              • 一个 ArrayAdapter,用于将数据源与 ListView 绑定


              MainActivity.java

              package com.sample.listview;
              
              import android.support.v7.app.AppCompatActivity;
              import android.os.Bundle;
              
              import android.widget.ArrayAdapter;
              import android.widget.ListView;
              
                  public class SecondActivity extends AppCompatActivity {
              
                  @Override
                  protected void onCreate(Bundle savedInstanceState) {
                       super.onCreate(savedInstanceState);
                       setContentView(R.layout.activity_main);
              
                       // data source
                       String[] arrayData = {"Debian", "Ubuntu", "Kali", "Mint"};
              
                       // ListView Widget from a Layout
                       ListView listView = (ListView) findViewById(R.id.mainListView);
              
                       // an ArrayAdapter (using a layout as model for displaying the array items)
                       ArrayAdapter aa = new ArrayAdapter<String>(this, R.layout.main_list_item_layout, arrayData);
              
                       // binding the ArrayAdapter with the ListView Widget
                       listView.setAdapter(aa);
                  }
              }
              


              activity_main.xml
              --->确保 ListView Widget 使用 wrap_content 作为 layout_width 和 layout_height

              <?xml version="1.0" encoding="utf-8"?>
              <LinearLayout
                  xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical"
                  android:paddingBottom="@dimen/activity_vertical_margin"
                  android:paddingLeft="@dimen/activity_horizontal_margin"
                  android:paddingRight="@dimen/activity_horizontal_margin"
                  android:paddingTop="@dimen/activity_vertical_margin"
                  tools:context="com.sample.listview.MainActivity">
              
              
                  <ListView
                      android:id="@+id/mainListView"
                      android:layout_width="wrap_content"  <---- HERE
                      android:layout_height="wrap_content" <---- HERE
                      />
              
              </LinearLayout>
              


              ma​​in_list_item_layout.xml

              <TextView xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/mainListItem"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:textColor="#ff0000"
                  android:textSize="20sp"
                  >
              
              </TextView>
              



              就是这样: ListView 不可点击,只是在屏幕上显示数据。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2023-03-19
                • 2020-01-17
                • 1970-01-01
                • 2016-09-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多