2011-10-04 15 views
66

Sto utilizzando un numero personalizzato ListView con RatingBar e ImageButton. Ecco il mio problema: quando clicco sul mio ListView, il mio OnItemClickListener non funziona. Per favore qualcuno puo aiutarmi. Codice:ListView con OnItemClickListener android

ListView lv = getListView(); 
setContentView(lv); 
lv.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) 
    { 
     Toast.makeText(SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

Grazie in anticipo!

+0

si prega di aggiungere un po 'di codice. E perché non funziona? Un errore? – Ivan

+0

Non ricevo alcun errore anche se sto eseguendo il debug anche se non sta andando dentro ... pubblicherò del codice. –

+1

@gujjula nikhilreddy Pubblica un po 'di codice. – Venky

risposta

104

Anche se una domanda molto vecchia, ma sto ancora postando una risposta in modo che possa aiutare qualcuno. Se si utilizza qualsiasi layout all'interno della visualizzazione dell'elenco quindi utilizzare ...

android:descendantFocusability="blocksDescendants"  

... sul primo layout genitore all'interno della lista.Questo funziona come per magia il click non sarà consumato da nessun elemento all'interno della lista ma andrà direttamente alla voce dell'elenco.

+2

Fantastico. Mi ha aiutato molto –

+1

Ha funzionato per me. Quando ho aggiunto la proprietà sopra, fare clic su elenco e clic sul pulsante funzionano entrambi. Grazie. – Raghuveer

+1

Ottimo !! risposta .. Saluti :) – swiftBoy

8

1) Verificare se si utilizza OnItemClickListener o OnClickListener (che non è supportato per ListView)
Documentation Android Developers ListView

2) Controllare se si è aggiunto al vostro ascoltatore ListView correttamente. È collegato a ListView non su ListAdapter!

ListView.setOnItemClickListener(listener); 

3) Se è necessario utilizzare OnClickListener, controllare se utilizzati DialogInterface.OnClickListener o View.OnClickListener (possono essere facilmente scambiati se non convalidato o se si utilizzano entrambi)

+0

il codice che sto usando ho esteso un elenco. ecco il mio codeListView lv = getListView(); \t \t \t \t setContentView (lv); \t \t \t \t lv.setOnItemClickListener (nuova OnItemClickListener() { \t \t \t \t \t @Override \t \t \t \t \t public void onItemClick (AdapterView arg0, Vista arg1, int position, lungo arg3) { \t \t \t \t \t \t Toast.makeText (SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT) .show(); \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t}); \t \t \t} –

3

setClickable come falso ImageButton come questo

imagebutton.setClickable(false); 

e quindi eseguire OnItemClickListener in listview.

+0

ok lo controllerò e dire u –

+0

non funziona .. –

+0

mi mostra il codice dell'adattatore ListView – Ramakrishna

17

Hey controllare questo, funziona per me ... spero che funziona per u troppo

Se voce dell'elenco contiene ImageButton

Problema: OnItemClickListener proprio non Repond qualsiasi a tutti!

Motivo: Non ne ho idea

Soluzione: nel codice, impostare lo stato attivo ImageButton s' a “false”

1: ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);

2: button.setFocusable(false);

+1

salvato la vita. Grazie –

+0

Felice che aiuti .. – Grv9098

9

Se si vuole abilitare voce click nella visualizzazione elenco utilizzare

listitem.setClickable(false); 

questo può sembrare sbagliato al primo posto ma funziona!

10

Possiedo un'attività che estende ListActivity.

Ho provato a fare qualcosa di simile in onCreate:

ListView listView = getListView(); 
listView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     Log.i("Hello!", "Y u no see me?"); 

    } 

}); 

Ma che non ha funzionato.

Invece ho semplicemente bisogno di ignorare onListItemClick:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 

    Log.i("Hello!", "Clicked! YAY!"); 

} 
+2

nota che questo funziona solo in ListActivity e ListFragment – lowellk

10

se vista voce dell'elenco contiene pulsante o casella di controllo o ImageButton, l'onitemclicklistener e non onitemlongclicklistener di lavoro a causa di esso ha proprio onclick ascoltatore.

impostare attivabile come falsa

holder.button.setFocusable(false); 
4

Se si definisce il vostro ListView programmaticamente:

mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS); 
3
listPaired = (ListView) findViewById(R.id.listView1); 
listPairedData = new ArrayList<String>(); 
araPaired = new ArrayAdapter(this, android.R.layout.simple_list_item_1, listPairedData); 
listPaired.setAdapter(araPaired); 
listPaired.setOnItemClickListener(listPairedClickItem); 

private OnItemClickListener listPairedClickItem = new OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

String info = ((TextView) arg1).getText().toString(); 
Toast.makeText(getBaseContext(), "Item "+info, Toast.LENGTH_LONG).show(); 
} 
}; 
+0

Ti va di aggiungere qualche spiegazione al tuo codice? –

1

basta inserire la linea in RatingBar:

android:isIndicator="true" 

In XML il ratingbar Assomiglia a questo.

<RatingBar 
    android:id="@+id/ratingBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="6dp" 
    android:isIndicator="true" 
    android:clickable="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false" /> 
1
lv.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 

     } 
    }); 
3

È inoltre possibile utilizzare "lambda", la sintassi Lambda non è supportato in Java 1.7 o JVM precedenti.

listView.setOnItemClickListener((parent, view, position, id) -> { 

    }); 
2

In Java come altri suggeriscono

listitem.setClickable(false); 

O in xml:

android:clickable="false" 

Funziona molto bene

1

conflitti OnItemClickLIstener Android con l'OnClickListener di elementi di fila di ListView in Adattatore. Devi solo assicurarti che il tuo codice sia ben gestito e scritto correttamente con gli standard.

Verificare la risposta nel link indicato di seguito:

Make list clickable

Problemi correlati