2011-09-12 10 views
36

Jak sprawić, by elementy w widoku listy nie klikały w stanie. Mam tematy i elementy w widoku listy, ale widok jest taki sam dla obu tematów i przedmiotów. elementy są zdolne do kliknięcia, ale temat nie jest klikalny. jak osiągnąć tenJak zrobić element w widoku listy, którego nie można kliknąć w Androidzie

lista będzie wyglądać

Topic 
item 
Topic 
item 
item 

temacie. click able (false) nie działał, proszę pomóc

+0

Czy Próbowalismy rozszerzalne listviews ?? – PedroAGSantos

+0

Nie, proszę wyjaśnić – Jes

Odpowiedz

53

Udostępnianie mojego doświadczenia wynika, co następuje wystarczyły (widok odwołuje się do widoku elementu listy):

view.setEnabled(false); 
view.setOnClickListener(null); 
  • Włączanie przez przesłonięcie metody nie zadziałało, ponieważ metoda nigdy nie została wywołana.
  • ustawienie ostrości na false nie działa również.
+0

to mi się udało, dzięki –

+4

Problem z moim rozwiązaniem polega na ponownym włączeniu kliknięcia. Po usunięciu detektora kliknięcia nie wiesz, jaki był poprzednio używany ListView. Zobacz rozwiązanie isEnabled, jeśli chcesz ponownie włączyć opcję kliknięcia/wyboru: http://developer.android.com/reference/android/widget/BaseAdapter.html#isEnabled(int) –

71

Nie wiem, czy nadal potrzebujesz, ale możesz zaimplementować własny Adapter i zastąpić metodę isEnabled (pozycja int). W zależności od typu ViewType elementu zwrócisz wartość true lub false.

+0

włączanie poprzez przesłonięcie metody nie zadziałało ponieważ metoda nigdy nie została wywołana –

+3

dzięki, to działa! – pawegio

+0

@ AlikElzin-kilaka możesz wyjaśnić, co nie zadziałało? Dla mnie to działało idealnie i myślę, że jest to najbardziej eleganckie rozwiązanie. – Noya

20

Aby uniemożliwić klikanie pozycji na liście, należy zwrócić do adaptera wartość false dla metody isEnabled dla pozycji na liście. Łatwym sposobem instancji adaptera i zastąpić isEnabled Można to zrobić w następujący sposób:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to, 0) { 
    @Override 
    public boolean isEnabled(int position) { 
     return false; 
    } 
}; 
+0

Ta metoda zapobiegła wyświetlaniu linii separatora między elementami listy. Zamiast tego ustawiłem następującą właściwość w XML listy 'Android: listSelector =" @ android: color/transparent "' i to zadziałało dla mnie. – Richard

7

To jest poprawna odpowiedź:

znalazłem wiele komentarzy mówiąc, że

setEnabled(false) 
setClickable(false) 
setFocusable(false) 

będzie działać, ale odpowiedź jest NO

Jedynym obejściem tego podejścia jest:

view = inflater.inflate(R.layout.row_storage_divider, parent, false); 
view.setOnClickListener(null); 
1

W karty, które trzeba umieścić to:

view = inflator.inflate(R.layout.items_menu_header, null);  
view.setOnClickListener(null); 

używam wartość logiczną, aby określić, czy nagłówek lub element, więc przypisać inny układ dla każdego typu.

4

Set listSelector przejrzyste ListView

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

w twojej ListView dodać następujący atrybut

android:cacheColorHint = "#00000000" 
Powiązane problemy