2012-03-28 5 views
11

Ho un layout di oggetto come questo, e impostare lo sfondo utilizzando il selettore voceOnItemClickListener non funzionava con la casella di controllo?

<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> 

ho una ListView che sarà contenuto alcuni elementi. Quindi ho usato setOnItemClickListener() ma non funziona. Ho scoperto che se rimuovo la casella di controllo nell'elemento, tutto sarà okey.

Qual è stato il problema tra la casella di controllo e l'ascoltatore qui? Puoi darmi qualche soluzione?

Update: Questo è il codice di chi ascolta

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()); 
        } 
}); 

ps: Voglio fare la casella di posta elettronica come Gmail su Android. Ogni riga ha una casella di controllo e utente può fare clic sulla voce, se vogliono vedere il messaggio

+1

Per favore mostra il codice che hai usato per impostare 'onClickListener()'. – PearsonArtPhoto

+0

Ho aggiornato il codice – TrungNguyen

+0

possibile duplicato di [ListView OnItemClickListener non risponde?] (Http://stackoverflow.com/questions/2367936/listview-onitemclicklistener-not-responding) –

risposta

16

L'onItemClickListener per la listView non funziona se avete cliccabili come pulsanti, ImageButton, Checkbox, ecc in listView. Aggiungi

mainListView.setItemsCanFocus(true); 

consultare ListView OnItemClickListener Not Responding?

+0

grazie per il tuo riferimento;) Proverò che – TrungNguyen

+4

Non funziona se una casella di controllo è presente nel nodo elenco – TacB0sS

1

Uso setOnCheckedChangeListener invece di onItemClickListne r per casella

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

c'è qualche altra soluzione? Voglio farlo sembrare come Gmail su Android. Hai ancora la casella di controllo e se l'utente fa clic sull'elemento se desidera leggere il messaggio – TrungNguyen

1

è possibile aggiungere questo codice all'interno del vostro OnItemClickListener metodo:

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

grazie per la tua soluzione ma hai usare GMAIL su Android? :) – TrungNguyen

+0

sì, io uso Gmail in Android .. –

+1

sì ... nella casella di posta in arrivo, se si fa clic sulla casella di controllo ci sarà qualche opzione per voi, MA se si fa clic sul resto si aprirà il messaggio ..Che cosa era quello che volevo;) – TrungNguyen

36

miglior modo per farlo è impostato queste seguenti proprietà per la casella di controllo:

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

Ho avuto lo stesso problema e l'ho fatto.

+1

Funziona se si disattiva la casella di controllo! – TacB0sS

+1

Lavora per me, grazie –

+0

Lavora anche per me. Grazie – Guilorgsorb

8

Basta aggiungere

android:descendantFocusability="blocksDescendants"

Per il vostro livello LinearLayout superiore della listitem.