如何设置 ListView 不可点击
Posted
技术标签:
【中文标题】如何设置 ListView 不可点击【英文标题】:How set ListView not clickable 【发布时间】:2013-07-30 12:14:08 【问题描述】:我有这个 ListView
只需要显示数据。
所以我不想让它可点击。
首先,我尝试将 XML listview 更改为:
<ListView
android:layout_
android:layout_
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: disabling highlight on listView click的可能重复
【参考方案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;
【讨论】:
谢谢!伟大而简单的解决方案 此方法防止分隔线显示在我的列表项之间。相反,我在 ListViewandroid: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; 此方法防止分隔线显示在我的列表项之间。相反,我在 ListViewandroid: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 布局文件或代码中尝试以下方法:
将此属性添加到 ListItem XML 文件的根 ViewGroup 元素(即 LinearLayout、RelativeLayout...):
android:descendantFocusability="blocksDescendants"
将此行添加到您的 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_
android:layout_
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_ <---- HERE
android:layout_ <---- HERE
/>
</LinearLayout>
main_list_item_layout.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainListItem"
android:layout_
android:layout_
android:textColor="#ff0000"
android:textSize="20sp"
>
</TextView>
就是这样: ListView 不可点击,只是在屏幕上显示数据。
【讨论】:
以上是关于如何设置 ListView 不可点击的主要内容,如果未能解决你的问题,请参考以下文章
listview点击item中的button改变item中的其它的控件的值
从 ListView 的 ItemContainer 为 ContextMenu 设置 DataContext?