OnitemClickListener non funziona con il pulsante Elenco Elemento contenente
-
29-10-2019 - |
Domanda
io ho ListView
con personalizzato Adapter
quali rifornimenti View
a ListView
in questo modo:
public View getView(int position, View convertView, ViewGroup parent)
{
RelativeLayout.LayoutParams lineParams;
RelativeLayout line=new RelativeLayout(context);
TextView tv=new TextView(context);
tv.setText("Text in postion="+i);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
line.addView(tv, lineParams);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
//checkbox
CheckBox checkBox=new CheckBox(context);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
line.addView(checkBox, lineParams);
return line;
}
E da qualche parte dentro ListView
c'è setOnItemClickListener()
, che dovrebbe intercettare gli eventi di clic sugli articoli. Il mio problema che, ogni volta che provo ad aggiungere casella di controllo all'elemento, non ricevo alcuna risposta dal mio ListView
. Se salto CheckBox
o qualsiasi altro Button
funziona.
Sono davvero bloccato con questo problema, ho provato tutti i tipi di layout, allineamento, avvolgimento e così via. Sembra CheckBox
interferisce ListView
Articolo Fare clic su Eventi.
Qualche idea su come superare?
Soluzione
Basta aggiungere questa riga nelle visualizzazioni degli elementi anziché Elenco
android:focusable="false"
Controlla più dettagli su questo da Android Custom ListView Impossibile fare clic sugli elementi
Altri suggerimenti
Se hai ImageButton all'interno dell'elemento elenco, è necessario aggiungere:
android:descendantFocusability="blocksDescendants"
All'elemento elemento dell'elenco root [come il layout radice].
Quindi all'interno di ogni ImageButton nell'elemento dell'elenco, è necessario aggiungere:
android:focusableInTouchMode="true"
Questo ha funzionato per me, ma stavo usando ImageButtons, non il pulsante standard.
Ho anche affrontato lo stesso problema che ho cercato di impostare android:focusable="false"
Per ListView ma non funziona quindi aggiungo questo all'elemento ListView .. come nella mia voce ListView Ho il pulsante di levetta che stava creando un problema, aggiungo android:focusable="false"
Per attivare il pulsante e ListView Elenco su elemento Fare clic su Ascoltatore Accendi di nuovo lavoro
Aggiungi la riga seguente al tuo elencoview
android:choiceMode="singleChoice"
o assicurati di impostare le seguenti righe sui campi di testo di layout
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
Avevo anche avuto il problema di un pulsante nel mio elenco. Sfortunatamente solo impostare l'attenzione su False per tutti gli oggetti nel mio adattatore non ha funzionato per me.
Ora ho una soluzione alternativa.
Nel tuo adattatore, crea un OnClickListener per il pulsante (o un altro oggetto cliccabile) se non l'hai già fatto. In questo onclicklistener chiami tu stesso il onitemclicklistener.
public void onClick(View v) {
mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}
Significa che dovrai dare l'accesso al tuo adattatore sia a Parent ListView che a OnitemClickListener.
Puoi considerare di scrivere il tuo OnTouchevent nel tuo elemento di ListView e inviare il touchingevent corretto alla vista figlio, il pulsante.
Beh, so che nessuna delle soluzioni di cui sopra funzionerà. Ho provato a cambiare gli attributi XML ma quelli non funzionano, ma l'ho implementato in una nuova moda. Ecco come:
Creare un interfaccia CheckBoxOnCheckListener
con metodo onCheckBoxChecked
e passare i parametri necessari, implementa l'interfaccia CheckBoxOnCheckListener
nel tuo attività o frammento contenente visualizzazione elenco.
Successivamente nel tuo adattatore, dichiara un mListener
come CheckBoxOnCheckListener
, e passa questo come parametro per il costruttore dell'adattatore fragment/activity
e lanciarlo a CheckBoxOnCheckListener
e assegnare a mListener
.
Set successivo mListener
come itemView.onClick
o CheckBox.onCheckCheckedListener
e onCheckChanged
Chiamata del metodo mListener.onCheckBoxChecked
.
Questo è tutto. Funzionerà sicuramente, ha funzionato per me. Per il codice solo PM.
Se stai usando ListView
in Activity
, assicurati di avere configurazione setOnItemClickListener()
myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener