如何设置ListView不可点击

时间:2013-07-30 11:14:02

标签: android android-listview clickable android-selector

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

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

13 个答案:

答案 0 :(得分:53)

以下是评论:

这样做的一种方法是: ListView.setOnClickListener(null);

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

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

中的另一种方式

干杯。

答案 1 :(得分:52)

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

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

答案 2 :(得分:12)

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

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

并覆盖以下方法以返回哪个项目无法点击

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

只需在适配器类中复制此方法即可。 什么都不做.........

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

答案 5 :(得分:1)

android:focusable="true"

到listview里面的任何项目,现在listview不可点击

答案 6 :(得分:1)

您可以使用

yourListView.setOnItemClickListener(null);

答案 7 :(得分:1)

简单方法:

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

答案 8 :(得分:0)

试试此代码

Adapter.getView()

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

答案 9 :(得分:0)

只需将android:enabled =“false”设置为listview,它就可以实现这一点。为什么不必要的继续覆盖方法..

答案 10 :(得分:0)

事实上, @override isEnabled()和 setOnClickListener(空) setClickable(假) setLongClickable(假) 没有为我工作。 我通过覆盖performItemClick

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

答案 11 :(得分:0)

  

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

我已经在我的一个项目中完成了这项工作,并且下面的示例工作正常。

基本上,你只需要:

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


<强> MainActivity.java

@media (min-width:900px) and (max-width: 1000px) {
        .imgbox { background-color:green;}
}​&#8203;


activity_main.xml中
---&gt; 确保ListView小部件正在使用wrap_content进行layout_width和layout_height

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


main_list_item_layout.xml     

<?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>



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

答案 12 :(得分:0)

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

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

      

    android:descendantFocusability =“ blocksDescendants”

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

    parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);