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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top