如何设置 ListView 不可点击

37

我有一个ListView,它只需要显示数据。
所以我不想让它可点击。
首先我尝试将XML listview更改为:

我有一個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
方法一: ListView.setOnClickListener(null); 或者添加 android:focusable="false" android:focusableInTouchMode="false",或者在布局中添加 android:listSelector="@android:color/transparent" - g00dy
我认为clickable属性只是为视图设置此属性。如果您想将项目设置为不可点击,则应将它们的clickable属性设置为false。希望这可以帮助到您。 - ZeusNet
@g00dy请回复您的评论,这样我就可以将其设置为已接受的答案。 - Tizianoreica
可能是重复的问题:Android:禁用ListView点击时的高亮 - aleb
14个回答

0
尝试这段代码:
Adapter.getView()中。
i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );

1
我想通过XML来设置所有内容,我无法相信我需要通过代码来管理它。 - Tizianoreica
@AntonioCalì 常见的 Android 初学者陷阱。 - dcow

0

只在包含碎片的onResume()方法中使用list.requestFocusFromTouch()对我有效。

¯\(ツ)


0

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

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

    android:descendantFocusability="blocksDescendants"

  2. 在负责创建/回收列表项的列表适配器方法中(最可能是getView()newView()),添加此行代码,其中parent是列表项的ViewGroup:

    parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);


-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,只是在屏幕上展示数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接