2013-07-30 11 views
30

Mam to ListView, które po prostu musi pokazać dane.
Więc nie chcę, aby było klikalne.
Najpierw próbowałem zmieniając XML ListView do:Jak ustawić listę nie można klikać

<ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:clickable="false" > 

Ale to nie działa.
Tak, aby rozwiązać mój problem mam ustawiony za pomocą kodu:

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

ale nie mogę uwierzyć, że nie ma lepszego rozwiązania. Dowolny pomysł?

+4

Jednym ze sposobów: 'ListView.setOnClickListener (null);' LUB dodaj 'android: focusable =" false " android: focusableInTouchMode =" false "' LUB dodaj układ "android: listSelector =" @ android: color/przezroczysty "' – g00dy

+0

Myślę, że atrybut klikalny ustawia tę właściwość tylko dla widoku. Jeśli chcesz ustawić elementy, które nie są klikalne, ich klikalny atrybut powinien być fałszywy. Mam nadzieję, że to pomoże – ZeusNet

+0

@ g00dy po prostu odpowiedzieć na twój komentarz, więc mogę ustawić jako Zaakceptowana odpowiedź –

Odpowiedz

46

Oto jest następujący komentarz:

Jednym ze sposobów, aby to zrobić jest: ListView.setOnClickListener(null); LUB

Możesz dodać android:focusable="false"android:focusableInTouchMode="false" LUB

inny sposób w układzie android:listSelector="@android:color/transparent"

Pozdrawiam.

+2

Tylko ostatnie rozwiązanie zadziałało dla mnie – Andranik

+0

Ostatnie rozwiązanie zadziałało dobrze – JayDev

+6

list.setOnClickListener (null) dało mi błąd za każdym razem, ale list.setOnItemClickListener (null); działało idealnie. –

0

Spróbuj kod

W Adapter.getView()

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

Chciałbym ustawić wszystko według XML, nie mogę uwierzyć, że muszę zarządzać nim przez kod –

+0

@ AntonioCalì powszechny błąd dla początkujących Androida. – dcow

1
android:focusable="true" 

dowolnego elementu wewnątrz ListView teraz ListView przyzwyczajenie klikalne

49

Wystarczy zastąpić isEnabled(position) w karty i zwraca wartość false

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

Dzięki!Świetne i proste rozwiązanie – resource8218

+0

proste i eleganckie –

+0

powinno to być zaakceptowaną odpowiedzią. –

12

zastąpić poniższą metodę. Zwróć wartość false, aby powiedzieć, że wszystkie elementy nie są klikalne.

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

i zastąpić poniżej metody do powrotu, który element nie jest klikalny

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

Gdzie powinienem umieścić tę metodę? –

+0

w swojej klasie adaptera –

+0

jego @Override \t public boolean areAllItemsEnabled() { \t \t return false; \t} –

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

zmienia kolor kliknięcia na taki sam, jak gdy nie jest kliknięty! , więc wygląda na to, że jest to zwykły tekst ... to praca.

+1

lub listView1.setSelector (android.R.color.transparent); –

2

Po prostu skopiuj tę metodę w swojej klasie adaptera. Nic nie robić .........

@Override 
public boolean isEnabled(int position) { 

    return false; 
} 

Można ustawić dowolny warunek, aby jakiś wybrany element unclickable.

@Override 
public boolean isEnabled(int position) { 
    //Y for non clickable item 
     if(data_list.get(position).equalsIgnoreCase("Y")) 
     { 
      return false; 
     } 
    return true; 
} 
1

Można użyć

yourListView.setOnItemClickListener(null); 
0

Wystarczy ustawić androida: enabled = "false" do ListView i byłoby zrobić trick..why do unneccesary zachować przesłanianie metod ..

0

W rzeczywistości @Override IsEnabled() i setOnClickListener (null) setClickable (fałsz) setLongClickable (fałsz) Nie ma pracy dla mnie. go rozwiązać przez ręcznym performItemClick

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

Prosty sposób:

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

mam ten ListView, że po prostu musi pokazać dane. Więc nie chcę, żeby było klikalne.

Zrobiłem to w jednym z moich projektów, a próbka poniżej działa dobrze.

Zasadniczo wystarczy:

  • źródła danych (ArrayList, na przykład)
  • ListView Widget
  • ArrayAdapter, w celu związania źródło danych z 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
--->Upewnij się, że ListView Widget korzysta wrap_content dla layout_width i 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> 



To go: ListView nie klikalne, tylko prezentacji danych na ekranie.

Powiązane problemy