2012-09-14 16 views
5

Mam następujący kod, który jest dość łatwy do zrozumienia. Chcę, aby pewne konkretne dziecko z tej listy nie było klikalne.jak uniemożliwić klikanie niektórych elementów listy?

ArrayAdapter<String> adapter = 
     new ArrayAdapter<String>(this,R.layout.list_item,R.id.module_name_item, testdata); 

    m_listview.setAdapter(adapter); 


    Log.i("check","1"); 
    if(sectionAttempts.get(0).equals("0")) 
    { 

     m_listview.getChildAt(2).setEnabled(false); 
     m_listview.getChildAt(3).setEnabled(false); 
    } 
    else 
    { 

     if(sectionAttempts.get(2).equals("0")) 
     { 

      m_listview.getChildAt(3).setEnabled(false); 
     } 


    } 

Dostaję błąd w

m_listview.getChildAt(2).setEnabled(false); 

jak java.lang.NullPointerException. Próbowałem znaleźć błąd i użyłem Log.i ("check", m_listview.getChildCount()); I to pokazuje 0. więc zgaduję, że lista nie została stworzona jeszcze !! Jak to możliwe.

Co wydaje się być problemem? Niż za wszelką pomoc z góry.

+0

wpisz błąd, który otrzymujesz – slezadav

+0

@ ślezadav: plzz zobacz zaktualizowane pytanie. Zgaduję, że mój listview nie jest tworzony, zanim zadzwonię te oświadczenia? – Abhinav

Odpowiedz

15

Metoda zastępowania areAllItemsSelectable(). Zwróć wartość false, aby powiedzieć, że wszystkie elementy nie są klikalne.

@Override 
public boolean areAllItemsSelectable() { 
    return false; 
} 

A następnie zastąpić poniżej metody do powrotu, który element nie jest klikalny

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

jaki był problem z moim kodem? – Abhinav

+0

Bardzo dobre rozwiązanie, Google myśli o wszystkim –

+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

0

Wydaje się, jeśli nie initilize swój ListView. Jeśli korzystasz z regularnej aktywności, używaj , jeśli używasz ListActivity lub m_listview=findViewById(R.id...).

7

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

view.setEnabled(false); 
view.setOnClickListener(null); 
  • umożliwiając poprzez nadpisanie metody nie działają jako metoda nie została wywołana.
  • ustawienie ostrości na false nie działa również.
Powiązane problemy