2012-10-30 14 views
30

Mam ListView, że jestem wypełnianie wartości z mojej bazy danych. Jeśli baza danych jest pusta, ustawiam pierwszą pozycję ListView na "Brak danych". Chcę wyłączyć klikanie tego elementu. Użyłem ArrayAdapter. Próbowałem robić areAllItemsEnabled, isEnabled false, ale to nie miało sensu. Nawet jeśli ustawię ListView na "C" i "setEnabled" na "fałsz", to nie ma sensu. I umieściłem kod dla OnItemClickListener w stanie else, nawet to nie powstrzymuje elementu listy od kliknięcia. Czy ktoś ma alternatywne rozwiązanie? Dzięki!Jak wyłączyć klikanie ListView w systemie Android?

Odpowiedz

87

W swoim zwyczajem ArrayAdapter użyć funkcji IsEnabled do return false:

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

zawsze działa na mnie.

+0

pracował także dla mnie !! –

+0

Rocking ... to działa dobrze ... – vabhavsingh

+0

Jak mogę ponownie włączyć po wyłączeniu? –

9

Można ustawić pusty Zobacz jak pokazał i będzie obsługiwane automatycznie:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp"> 

    <ListView android:id="@android:id/list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#00FF00" 
       android:layout_weight="1" 
       android:drawSelectorOnTop="false"/> 

    <TextView android:id="@android:id/empty" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#FF0000" 
       android:text="No data"/> 
</LinearLayout> 
+2

To powinno być zaakceptowane odpowiedź! Nie tylko odpowiada na pytanie, ale także sugeruje lepszy sposób obsługi pustej listy! – chuky

0

Być może można użyć instrukcji if, aby sprawdzić zawartość wpisu listview w OnClick, jeśli zawiera ona: „Nie dane”nie robić nic, jeszcze zrobić zwykły

2

tworzyć Adapter do tej listy, a nie zastąpić tę metodę

public boolean isEnabled(int position); 

następnie powrócić false gdy chcesz wyłączyć jednym kliknięciem

13

tym łatwiejsze! list.setEnabled (fałsz)

+0

Wielkie dzięki! jego pracował dla mnie, wszystko powyższe nie działało dla mnie .. –

+2

Źle! Zapobiega to przewijaniu. –

0

Zrobiłem tak według mojego wymogu nadzieję, że może Ci pomóc niektórym jak

@Override 

public boolean isEnabled(int position) { 
     if(data.get(position).isClickable==false) 
     { 
      return false; 
     } 
     return super.isEnabled(position); 
    } 
Powiązane problemy