2012-03-28 14 views
11

Ich habe ein Element das Layout so, und der Hintergrund von Artikel SelektorOnItemClickListener funktionierte nicht mit der Checkbox?

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

Ich habe eine Listview, die einige Elemente Inhalt wird. Dann habe ich setOnItemClickListener() verwendet, aber es funktioniert nicht. Ich habe festgestellt, dass, wenn ich das Kontrollkästchen im Artikel entfernen, alles OK wird.

Was war das Problem zwischen der Checkbox und dem Listener hier? Können Sie mir eine Lösung geben?

Update: Dies ist der Code des Zuhörers

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: ich den Posteingang wie gmail auf Android machen wollen. Jede Zeile hat eine Checkbox und Benutzer können auf Element klicken, wenn sie die Nachricht

+1

Bitte zeigen Sie den Code an, mit dem Sie 'onClickListener()' gesetzt haben. – PearsonArtPhoto

+0

Ich habe den Code – TrungNguyen

+0

mögliche Duplikate von [ListView OnItemClickListener reagiert nicht?] (Http://stackoverflow.com/questions/2367936/listview-onitemclicklistener-not-respondering) –

Antwort

16

Die onItemClickListener für das Listview sehen wollen, wird nicht funktionieren, wenn Sie irgendwelche Clickables haben wie Buttons, ImageButton, Checkbox, etc in der listView. In

mainListView.setItemsCanFocus(true); 

Siehe ListView OnItemClickListener Not Responding?

+0

danke für Ihre Referenz;) Ich werde versuchen, dass – TrungNguyen

+4

Funktioniert nicht, wenn ein Kontrollkästchen im Listenknoten – TacB0sS

1

Verwenden setOnCheckedChangeListener statt onItemClickListne r für Checkbox

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

Gibt es noch eine andere Lösung? Ich möchte es wie Google Mail auf Android aussehen. Immer noch die Checkbox und wenn Benutzer auf das Element klicken, wenn sie die Nachricht lesen möchten – TrungNguyen

1

Sie diesen Code in Ihrem OnItemClickListener Methode könnte hinzufügen:

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

ist danke für Ihre Lösung, aber Sie Verwenden Sie Gmail auf Android? :) – TrungNguyen

+0

ja ich benutze Gmail in android .. –

+1

yup ... im Posteingang, wenn Sie auf das Kontrollkästchen geklickt haben, wird es eine Option für Sie, aber wenn Sie auf den Rest angeklickt wird es die Nachricht öffnen ..Was war was ich will;) – TrungNguyen

36

Der beste Weg, dies zu tun, diese folgenden Eigenschaften für Ihre Checkbox gesetzt ist:

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

Ich hatte ein gleiches Problem und tat dies.

+1

Arbeit, wenn Sie das Kontrollkästchen deaktivieren! – TacB0sS

+1

Arbeit für mich, Danke –

+0

Arbeite auch für mich. Vielen Dank – Guilorgsorb

8

Fügen Sie einfach

android:descendantFocusability="blocksDescendants"

Um die Top-Level-Linearlayout des listitem.

Verwandte Themen