2012-03-28 23 views
11

que tienen un diseño de elemento como este, y establecer el fondo mediante el uso Selector de elementosOnItemClickListener no funcionaba con la casilla de verificación?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/itemselector" 
android:orientation="horizontal" > 
<CheckBox 
    android:id="@+id/message_row_checkbox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/message_row_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Title" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textStyle="bold" 
     android:textColor="@color/black" /> 

itemselector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
android:state_pressed="true" 
android:drawable="@color/yellow" /> 
<item 
android:state_selected="true" 
android:drawable="@color/green" /> 
<item 
android:drawable="@color/white" /> 
</selector> 

Tengo un ListView que el contenido de algunos artículos. Luego usé setOnItemClickListener() pero no funciona. Descubrí que si eliminé la casilla de verificación del artículo, todo estará bien.

¿Cuál era el problema entre la casilla de verificación y el oyente aquí? ¿Me puede dar alguna solución?

Actualización: Este es el código del oyente

mainListView.setAdapter(messageAdapter); 
mainListView.setOnItemClickListener(new OnItemClickListener() { 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
         Message p = (Message) arg0.getItemAtPosition(arg2); 
         Toast.makeText(TarsiusActivity.this, p.getTitle(), Toast.LENGTH_LONG); 
         Log.i("Item Clicked", p.getTitle()); 
        } 
}); 

PD: Quiero hacer la bandeja de entrada de Gmail como en Android. Cada fila tiene una casilla de verificación y el usuario puede hacer clic sobre el punto si quieren ver el mensaje

+1

Por favor, muestre el código que utilizó para configurar 'onClickListener()'. – PearsonArtPhoto

+0

He actualizado el código – TrungNguyen

+0

posible duplicado de [ListView OnItemClickListener Not Responding?] (Http://stackoverflow.com/questions/2367936/listview-onitemclicklistener-not-responding) –

Respuesta

16

El onItemClickListener de la vista de lista no funcionará si tiene alguna clickables como botones, ImageButton, Checkbox, etc. en la lista Vista. Añadir

mainListView.setItemsCanFocus(true); 

Consulte ListView OnItemClickListener Not Responding?

+0

gracias por su referencia;) Voy a intentar que – TrungNguyen

+4

No funciona si hay una casilla de verificación en el nodo – TacB0sS

1

Uso setOnCheckedChangeListener en lugar de onItemClickListne r de casilla

CheckBox check; 
check=new CheckBox(this); 
check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // TODO Auto-generated method stub 
    } 
}); 
+0

¿hay alguna otra solución? Quiero que se vea como Gmail en Android. Todavía tiene la casilla de verificación y si el usuario hace clic en el elemento si quiere leer el mensaje – TrungNguyen

1

Se podría añadir el código dentro de su OnItemClickListener método:

public void onItemClick(AdapterView parent, View view, int position, long id){ 
    CheckBox box = (CheckBox)view.findViewById(R.id.course_search_checkbox); 
    box.setChecked(true); 
} 
+0

de la lista gracias por su solución, pero ¿ usar GMAIL en android? :) – TrungNguyen

+0

sí, uso Gmail en Android ... –

+1

yup ... en la bandeja de entrada, si hizo clic en la casilla de verificación, habrá alguna opción para usted, PERO si hizo clic en el resto, se abrirá el mensaje.¿Qué era lo que quería;) – TrungNguyen

36

mejor manera de hacer esto se establece que las siguientes propiedades de la casilla:

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

Tuve un problema similar e hice esto.

+1

¡Trabaja si deshabilitas la casilla de verificación! – TacB0sS

+1

Trabaja para mí, gracias –

+0

Trabaja para mí también. Gracias – Guilorgsorb

8

Sólo añadir

android:descendantFocusability="blocksDescendants"

Para su LinearLayout nivel superior de la listitem.

Cuestiones relacionadas