37

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

但我不敢相信没有更好的解决方案。任何想法?

4

13 回答 13

57

在这里,在评论之后:

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

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

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

干杯。

于 2013-08-07T15:17:17.627 回答
54

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

@Override
public boolean isEnabled(int position) {
    return false;
}
于 2013-07-30T11:19:13.963 回答
12

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

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

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

public boolean isEnabled(int position) {
    if(position == your_item_pos) {
          return false;
    }
    return true;
}
于 2013-07-30T11:23:49.303 回答
4
android:listSelector="@android:color/transparent"

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

于 2014-03-08T18:46:09.887 回答
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;
}
于 2014-07-11T06:10:42.017 回答
1
android:focusable="true"

到列表视图中的任何项目现在列表视图都不能点击

于 2013-07-30T11:17:37.823 回答
1

你可以使用

yourListView.setOnItemClickListener(null);
于 2014-10-14T23:50:41.957 回答
1

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

于 2015-04-06T07:55:05.223 回答
1

简单的方法:

listView.setSelector(android.R.color.transparent);
于 2015-06-04T17:31:25.957 回答
0

试试这个代码

Adapter.getView()

i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
于 2013-07-30T11:16:44.590 回答
0

其实@override isEnabled() 和 setOnClickListener(null) setClickable(false) setLongClickable(false) 对我不起作用。我通过覆盖 performItemClick 来解决它

@Override
public boolean performItemClick(View view, int position, long id) {
 if(!clickAble){
     return false;
 }
    return super.performItemClick(view,position,id);
}
于 2015-04-25T02:33:09.827 回答
0

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

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

    android:descendantFocusability="blocksDescendants"

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

    parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

于 2019-01-21T09:41:19.260 回答
-1

我有这个只需要显示数据的 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 小部件正在使用 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>


main_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 不可点击,只是在屏幕上呈现数据。

于 2016-06-30T16:13:40.473 回答