12

Ho un ListView (my_list.xml):ListView onClickListener() non funziona dopo l'aggiunta RadioButton

<ListView 
     android:id="@+id/my_list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:choiceMode="singleChoice" 
     /> 

Il layout per ogni elemento della lista è (list_item.xml):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    > 

    <ImageView 
      android:id = "@+id/my_icon" 
      android:layout_width ="wrap_content" 
      android:layout_height ="wrap_content" 
      android:layout_centerVertical="true" 
    /> 
    <TextView 
     android:id="@+id/my_str" 
     android:layout_width="wrap_content" 
     android:layout_height = "wrap_content" 
     android:layout_toRightOf="@id/my_icon" 
    /> 

    <!--This radio button makes the list item unselectable, why?--> 
    <RadioButton 
     android:id="@+id/my_radio_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     /> 
</RelativeLayout> 

Nel codice Java, io uso SimpleAdapter per la lista:

my_list = (ListView) findViewById(R.id.my_list); 

SimpleAdapter adapter = new SimpleAdapter(context, getOptions(), 
      R.layout.list_item, 
      new String[] { "icon1","str1" }, 
      new int[] {R.id.my_icon, R.id.my_str }); 

my_list.setAdapter(adapter); 

//onClickListener does not work after I added RadioButton in list item layout 
my_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

      Log.v("SELECTED", position+""); 
     } 
    }); 

Come si vede, nel codice sopra, nel layout dell'elemento dell'elenco, ho aggiunto un RadioButton, dopo aver aggiunto questo pulsante, il mio elenco onClickListener non funziona più, perché ?? (Funziona se è senza RadioButton sul layout di elemento della lista)

+1

perché ora il suo conflitto di guadagnare ** ** Messa a fuoco tra la voce del vostro ListView e il pulsante di opzione all'interno di tale voce – waqaslam

+0

Poi come sbarazzarsi di questo problema? Ho bisogno di un pulsante di opzione sull'elemento dell'elenco e ho bisogno che il pulsante di opzione sia selezionato quando l'utente fa clic sull'area dell'elemento. –

+0

il listener di clic funziona solo se nessun'altra vista è messa a fuoco. Impostare CheckBox su focusable = "false" dovrebbe fare il trucco per te http://stackoverflow.com/questions/1121192/android-custom-listview-unable-to-click-on-items –

risposta

24

Impostare le seguenti proprietà per il vostro RadioButton:

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

e nella vostra OnItemClickListener, è necessario impostare il pulsante di opzione selezionata flag by code.


Set si ListView, come di seguito:

<ListView 
    android:id="@+id/my_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
+0

Sì, ora è ok . Ma come si fa a selezionare il pulsante di opzione quando l'utente fa clic sull'area dell'oggetto? (e rendilo un unico elenco di selezione) –

+0

vedi la mia risposta aggiornata ... in realtà devi gestirlo tramite codice nel tuo OnItemClickListener per controllare il pulsante di opzione quando viene cliccato l'elemento – waqaslam

+0

Sì, potresti anche suggerire come fare la radio i pulsanti sulla lista per essere una selezione singola? Voglio dire, al momento, anche se ho impostato la modalità di selezione della lista per essere single. ma ogni volta che clicco su un elemento della lista, il pulsante radio è impostato su "checked" per codice, il che rende l'elenco simile a più selezioni. –

2

aggiungere questo codice al codice XML RadioButton:

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

Un'altra parola chiave per risolvere questo problema è TouchDelegate.

Edit:

https://stackoverflow.com/a/5528945/1285331

+0

Questo ha funzionato perfettamente per me. +1 – prolink007