12

Tengo un (my_list.xml ) ListView:ListView OnClickListener() no funciona después de la adición de RadioButton

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

El diseño para cada elemento de la lista es (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> 

en código Java, utilizo SimpleAdapter para 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+""); 
     } 
    }); 

Como puede ver, en el código anterior, en el diseño de la lista de elementos, agregué un RadioButton, después de que agregué este botón, mi lista onClickListener ya no funciona, ¿por qué? (Funciona si es sin RadioButton el diseño de lista de elementos)

+1

porque ahora es un conflicto de ganar ** ** Enfoque entre este punto de su vista de lista y el botón de radio dentro de ese elemento – waqaslam

+0

Entonces cómo deshacerse de este problema? Necesito el botón de radio en el elemento de la lista, y necesito que se seleccione el botón de radio cuando el usuario haga clic en el área del elemento. –

+0

el detector de clics solo funciona si ninguna otra vista es enfocable. Establecer su CheckBox en focusable = "false" debería ser el truco para usted http://stackoverflow.com/questions/1121192/android-custom-listview-unable-to-click-on-items –

Respuesta

24

Establecer las propiedades siguientes a su RadioButton:

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

y en su OnItemClickListener, debe configurar de el botón de radio controlada bandera por código.


Conjunto que Listview de la siguiente manera:

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

Sí, ahora está bien . ¿Pero cómo hacer que el botón de radio sea seleccionado cuando el usuario hace clic en el área del elemento? (y haz que sea una sola lista de selección) –

+0

mira mi respuesta actualizada ... en realidad necesitas manejar esto por código en tu OnItemClickListener para verificar el botón de radio cuando se hace clic en el elemento – waqaslam

+0

Sí, ¿podrías sugerir también cómo hacer la radio? botones en la lista para ser una sola selección? Quiero decir, actualmente, aunque configuré el modo de selección de la lista para que sea único. pero cada vez que hago clic en un elemento de la lista, el botón de opción se establece en "marcado" por código, lo que hace que la lista parezca de selección múltiple. –

2

añadir este código a su código XML RadioButton:

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

Otra palabra clave para resolver este problema es TouchDelegate.

Editar:

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

+0

Esto funcionó perfectamente para mí. +1 – prolink007

Cuestiones relacionadas