Как установить 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); 

но я не могу поверить, что нет лучшего решения. Есть идеи?

12 ответов


вот он, следующий комментарий:

один из способов сделать это: ListView.setOnClickListener(null); или

вы можете добавить android:focusable="false" android:focusableInTouchMode="false" или

другой способ в макете android:listSelector="@android:color/transparent"

Ура.


просто переопределить isEnabled (позиция) в вашем адаптере и вернуть 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;
}

вы можете установить любое условие для того чтобы сделать некоторый выбранный деталь unclickable.

@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"

для любого элемента внутри listview теперь listview не будет кликабельным


можно использовать

yourListView.setOnItemClickListener(null);

простой способ:

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

попробуйте этот код

на адаптер.getView адаптера()

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

просто установите android: enabled= "false" в listview, и это сделает трюк..зачем излишне держать переопределяющие методы..


в самом деле, @override isEnabled() и setOnClickListener (null) setClickable(ложные) setLongClickable (false) Они не работают на меня. Я решаю его путем переопределения performItemClick

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

у меня есть этот 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>



вот это: A ListView не кликабельный, просто представляя данные на экране.