Подтвердить что ты не робот

Как установить ListView не интерактивно

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

но я не могу поверить, что лучшего решения нет. Любая идея?

4b9b3361

Ответ 1

Вот он, следуя комментарию:

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

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

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

Приветствия.

Ответ 2

Просто переопределите isEnabled (position) в вашем адаптере и верните false

@Override
public boolean isEnabled(int position) {
    return false;
}

Ответ 3

переопределить метод ниже. Верните false, чтобы сказать, что все элементы не доступны для просмотра.

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

И переопределить ниже метод, чтобы вернуть тот элемент, который нельзя кликать

public boolean isEnabled(int position) {
    if(position == your_item_pos) {
          return false;
    }
    return true;
}

Ответ 4

android:listSelector="@android: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"

для любого элемента внутри списка view now listview wont clickable

Ответ 7

Вы можете использовать

yourListView.setOnItemClickListener(null);

Ответ 8

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

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

Ответ 9

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

В Adapter.getView()

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

Ответ 10

Просто установите андроид: enabled = "false" в listview, и он выполнит трюк.. почему нет необходимости сохранять методы переопределения.

Ответ 11

Фактически, @override isEnabled() и setOnClickListener (нуль) setClickable (ложь) setLongClickable (ложь) Для меня не работает. Я решаю его путем переопределения performItemClick

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

Ответ 12

У меня есть этот 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 не доступен для кликов, просто представляя данные на экране.

Ответ 13

Это связано с тем, что ваш элемент ListView может иметь фокусируемый или кликабельный элемент, попробуйте следующий подход в файле XML Layout или в коде:

  1. Добавьте этот атрибут в корневой элемент ViewGroup вашего XML файла ListItem (то есть LinearLayout, RelativeLayout,...):

    андроид: descendantFocusability = "blocksDescendants"

  2. Добавьте эту строку в метод адаптера списка, который отвечает за создание/переработку элемента списка (наиболее вероятно, getView() или newView()), в то время как parent является ViewGroup элемента списка:

    parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);