Come sparare onListItemClick in Listactivity con i pulsanti nell'elenco?

Ho una semplice ListActivity che utilizza un ListAdapter personalizzato per generare le viste nell'elenco. Di solito, l'elenco di adattatore potrebbe solo riempire le visualizzazioni con TextViews, ma adesso vorrei anche mettere un button.

È però la mia comprensione e l'esperienza però che mettere una vista focalizzabile nell'elemento dell'elenco impedisce la sparifica di onListItemClick () in ListActivity quando si fa clic sull'elemento dell'elenco. Il button funziona normalmente all'interno della voce di elenco, ma quando viene premuto qualcosa oltre al button, vorrei triggersre onListItemClick.

  • Android: Clear Stack di attività
  • Cambiare where il cursore inizia in un EditText esteso
  • API di Android Maps richiede openGL es 2
  • Creazione di un personalizzato OnClickListener
  • Android Multi-dimensional arrays in arrayss.xml
  • Come posso passare la visualizzazione delle immagini tra le attività in android
  • Come posso fare questo lavoro?

  • HttpResponseCache non funziona in Android Lollipop
  • Libreria di visualizzatore di Android PDF
  • BroadcastReceiver per la localizzazione
  • Come posso controllare in codice la versione Android come 1.5 o 1.6?
  • Il lettore multimediale browser browser Android (stagefright?) Ha visualizzato il nome del supporto multimediale
  • Ritaglia l'image salvata usando com.android.camera.action.CROP su android
  • 8 Solutions collect form web for “Come sparare onListItemClick in Listactivity con i pulsanti nell'elenco?”

    come ho scritto nella precedente soluzione di commento è impostareFocusable (false) su ImageButton.

    C'è ancora una soluzione più elegante per provare ad aggiungere android:descendantFocusability="blocksDescendants" nel layout di root dell'elenco. Ciò renderà ansible clic su OnList e separatamente u può gestire i clic di Button o ImageButton

    Spero che sia d'aiuto 😉

    Saluti

    Spero di poter aiutare qui. Suppongo che tu abbia layout personalizzato per gli elementi di listView, e questo layout consiste di button e di altre visualizzazioni – come TextView, ImageView o qualunque cosa. Ora desideri che un evento diverso sia stato sparato clic sul button e un altro evento sparato su tutto ciò che è stato scattato.

    Puoi raggiungere questo risultato senza utilizzare onListItemClick () della tua ListActivity.
    Ecco cosa devi fare:

    Stai utilizzando il layout personalizzato, quindi probabilmente stai superando il metodo getView () dalla tua scheda personalizzata. Il trucco è quello di impostare i diversi ascoltatori del tuo button e diversi per l'intera visione (la tua row). Date un'occhiata all'esempio:

     private class MyAdapter extends ArrayAdapter<String> implements OnClickListener { public MyAdapter(Context context, int resource, int textViewResourceId, List<String> objects) { super(context, resource, textViewResourceId, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { String text = getItem(position); if (null == convertView) { convertView = mInflater.inflate(R.layout.custom_row, null); } //take the Button and set listener. It will be invoked when you click the button. Button btn = (Button) convertView.findViewById(R.id.button); btn.setOnClickListener(this); //set the text... not importnt TextView tv = (TextView) convertView.findViewById(R.id.text); tv.setText(text); //!!! and this is the most importnt part: you are settin listener for the whole row convertView.setOnClickListener(new OnItemClickListener(position)); return convertView; } @Override public void onClick(View v) { Log.v(TAG, "Row button clicked"); } } 

    La tua class OnItemClickListener potrebbe essere dichiarata come qui:

     private class OnItemClickListener implements OnClickListener{ private int mPosition; OnItemClickListener(int position){ mPosition = position; } @Override public void onClick(View arg0) { Log.v(TAG, "onItemClick at position" + mPosition); } } 

    Certamente probabilmente aggiungere alcuni parametri al constructor OnItemClickListener.
    E una cosa importnte – l'implementazione di getView mostrato in precedenza è piuttosto brutta, normalmente si dovrebbe utilizzare il model ViewHolder per evitare chiamate findViewById .. ma probabilmente lo sapete già.
    Il mio file custom_row.xml è RelativeLayout con il button di id "button", TextView di id "text" e ImageView dell'image "id" – solo per rendere le cose chiare.
    Saluti!

    Quando un ListView personalizzato contiene elementi focalizzabili, OnListItemClick non funziona (credo sia il comportmento previsto). Basta rimuovere il focus dalla vista personalizzata, farà il trucco:

    Per esempio:

     public class ExtendedCheckBoxListView extends LinearLayout { private TextView mText; private CheckBox mCheckBox; public ExtendedCheckBoxListView(Context context, ExtendedCheckBox aCheckBoxifiedText) { super(context); … mText.setFocusable(false); mText.setFocusableInTouchMode(false); mCheckBox.setFocusable(false); mCheckBox.setFocusableInTouchMode(false); … } } 

    Ho lo stesso problema: OnListItemClick non licenziato! [Risolto]
    Questo accade nella class che estende ListActivity,
    con un layout per ListActivity che il contenuto TextBox e ListView sono annidati in LinearLayout
    e un altro layout per le righe (un CheckBox e TextBox nidificati in LineraLayout).

    Questo è il codice:

    res / layout / configpage.xml (principale per ListActivity)

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/selection" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="pippo" /> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="false" android:background="#aaFFaa" > </ListView> <LinearLayout> res/layout/row.xml (layout for single row) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" **android:focusable="false"** **android:focusableInTouchMode="false"** /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" **android:focusable="false"** **android:focusableInTouchMode="false"** /> </LinearLayout> 

    src /…/…/ ConfigPage.java

     public class ConfigPage extends ListActivity { TextView selection; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.configpage); // loaded from res/value/strings String[] azioni = getResources().getStringArray(R.arrays.ACTIONS); setListAdapter(new ArrayAdapter&lt;String&gt;(this, R.layout.row, R.id.text, azioni)); selection = (TextView) findViewById(R.id.selection); } public void onListItemClick(ListView parent, View view, int position, long id) { selection.setText(" " + position); } } 

    Questo inizia a funzionare quando ho aggiunto a row.xml

    • android:focusable="false"
    • android:focusableInTouchMode="false"

    Uso Eclipse 3.5.2
    Android SDK 10.0.1
    min Versione SDK: 3

    Spero che questo sia utile
    … e mi dispiace per il mio inglese 🙁

    basta aggiungere android:focusable="false" come uno degli attributi del tuo button

    Ho avuto lo stesso problema con ToggleButton. Dopo mezz'ora di sbattere la testa contro un muro ho finalmente risolto. È semplice come rendere la vista focalizzabile non focalizzabile, usando "android: focusable". Dovresti anche evitare di giocare con la possibilità di messa a fuoco e la possibilità di click (ho appena fatto delle parole) della row di elenco, lasciathemes solo con il valore predefinito.

    Naturalmente, ora che le tue viste focalizzabili nella row di elenco non sono focalizzabili, gli utenti che utilizzano la tastiera potrebbero avere problemi, ben, concentrandoli. Non è probabile che sia un problema, ma solo nel caso in cui si desidera scrivere applicazioni perfette al 100%, è ansible utilizzare l'evento onItemSelected per rendere gli elementi della row selezionata focalizzati e gli elementi della row precedentemente selezionati non focalizzabili.

      ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } }); 

    Ho usato il getListAdapter (). GetItem (posizione) che instanna un object che contiene i miei valori all'interno dell'elemento

     MyPojo myPojo = getListAdapter().getItem(position); 

    quindi usa il metodo getter dal mioPojo che chiamerà i relativi valori all'interno dell'elemento.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.