我有这个只需要显示数据的ListView
。
所以我不想让它可点击。
首先,我尝试将XML列表视图更改为:
<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"
的另一种方式
干杯。
只需在适配器中覆盖 isEnabled(position( 并返回 false
@Override
public boolean isEnabled(int position) {
return false;
}
覆盖以下方法。返回 false 表示所有项目都不可单击。
@override
public boolean areAllItemsEnabled() {
return false;
}
并覆盖以下方法以返回不可点击的项目
public boolean isEnabled(int position) {
if(position == your_item_pos) {
return false;
}
return true;
}
android:listSelector="@android:color/transparent"
它将单击时的颜色更改为与未单击时相同的颜色!所以它看起来好像是纯文本...这是一个变通办法。
只需在适配器类中复制此方法即可。无事可做...
@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;
}
android:focusable="true"
到列表视图中的任何项目 现在列表视图将无法单击
yourListView.setOnItemClickListener(null);
只需将android:enabled="false"设置为列表视图,它就可以了。为什么要不必要地保持压倒方法..
简单的方法:
listView.setSelector(android.R.color.transparent);
试试这段代码
In Adapter.getView((
i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
事实上,@override isEnabled(( 和setOnClickListener(null(设置可点击(假(设置长可点击(假(没有为我工作。我通过覆盖执行项目单击来解决它
@Override
public boolean performItemClick(View view, int position, long id) {
if(!clickAble){
return false;
}
return super.performItemClick(view,position,id);
}
这是因为您的 ListView 项可能具有可聚焦或可单击的元素,请在 XML 布局文件或代码中尝试以下方法:
将此属性添加到 ListItem XML 文件的根 ViewGroup 元素(即 LinearLayout、RelativeLayout, ...(:
android:descendantFocusability="blocksDescendants">
将此行添加到列表适配器方法中,该方法负责创建/回收列表项(很可能是
getView()
或newView()
(,而父项是列表项的视图组:parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
仅在包含片段的onResume()
方法中使用list.requestFocusFromTouch()
对我有用。
\(ツ(/̄
我有一个只需要显示数据的列表视图。所以我不想让它可点击。
我已经在我的一个项目中完成了此操作,并且示例波纹管工作正常。
基本上,您只需要:
- 数据源(例如 ArrayList(
- 列表视图小部件
- 一个 ArrayAdapter,以便将数据源与列表视图绑定
主活动.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>
就是这样:列表视图不可单击,只是在屏幕上显示数据。