2013-07-30 3 views
30

У меня есть это ListView, которому просто нужно показать данные.
Так что я не хочу делать его доступным для кликов.
Сначала я попытался изменить XML ListView к:Как установить ListView не clickable

<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);' OR add 'android: focusable =" false " android: focusableInTouchMode =" false "или добавить в макет' android: listSelector = "@ android: color/transparent "' – g00dy

+0

Я думаю, что атрибут clickable устанавливает это свойство только для представления. Если вы хотите, чтобы элементы не были кликируемыми, ваш атрибут clickable должен быть равен false. Надеюсь, это поможет – ZeusNet

+0

@ g00dy просто ответит с вашим комментарием, поэтому я могу установить как принятый ответ –

ответ

46

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

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

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

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

Cheers.

+2

Только последнее решение сработало для меня – Andranik

+0

Последнее решение отлично поработало для меня – JayDev

+6

list.setOnClickListener (null) дал мне ошибку каждый раз, но list.setOnItemClickListener (null); работал отлично. –

0

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

В Adapter.getView()

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

Я хотел бы установить все по XML, я не могу поверить, что мне нужно управлять им по коду –

+0

@ AntonioCalì обычная ловушка начинающего андроида. – dcow

1
android:focusable="true" 

любому из пункта внутри ListView Теперь ListView обыкновение интерактивными

49

Просто переопределить isEnabled(position) в адаптере и возврат false

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

Спасибо!Отличное и простое решение – resource8218

+0

простой и элегантный –

+0

Это должно было принять принятый ответ –

12

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

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

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

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

Куда я должен поместить этот метод? –

+0

в вашем классе адаптера –

+0

его @Override \t public boolean areAllItemsEnabled() { \t \t return false; \t} –

4
android:listSelector="@android:color/transparent" 

он меняет цвет с щелчком на тот же самый, что и при его отсутствии! , так что кажется, что это простой текст ... это работа.

+1

или listView1.setSelector (android.R.color.transparent); –

2

Просто скопируйте этот метод в свой класс адаптера. Ничего делать .........

@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; 
} 
1

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

yourListView.setOnItemClickListener(null); 
0

Просто установите андроид: включено = «ложь» в ListView, и было бы сделать trick..why к ненужному держать переопределение методов ..

0

В самом деле, @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); 
} 
1

Легкий способ:

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

У меня есть это ListView, что просто необходимо для отображения данных. Поэтому я не хочу делать его доступным для кликов.

Я сделал это в одном из своих проектов, и образец ниже работает отлично.

В принципе, вам просто нужно:

  • источник данных (ArrayList, например)
  • ListView Widget
  • ArrayAdapter, чтобы связать источник данных с ListView


MainActivity.j AVA

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