Multiple-Choice-Liste mit benutzerdefinierter Ansicht?
Ich habe gesehen, Beispiel com.Beispiel.android.apis.Blick.List11 von ApiDemos. In diesem Beispiel wird jede Zeile vertritt die Ansicht android.R.simple_list_item_multiple_choice. Jede solche Ansicht hat eine TextView
und ein CheckBox
.
Nun möchte ich jede Ansicht haben 2 TextView
s und 1 CheckBox
ähnlich wie die List3 Beispiel. Ich habe versucht das erstellen einer benutzerdefinierten layout-Datei row.xml wie diese:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<CheckBox
android:id="@+id/checkbox"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/text_name"
android:textSize="13px"
android:textStyle="bold"
android:layout_toLeftOf="@id/checkbox"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_phone"
android:textSize="9px"
android:layout_toLeftOf="@id/checkbox"
android:layout_below="@id/text_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
Dann in Activity
's onCreate()
ich dies so tun:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Query the contacts
mCursor = getContentResolver().query(Phones.CONTENT_URI, null, null, null, null);
startManagingCursor(mCursor);
ListAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row,
mCursor,
new String[] { Phones.NAME, Phones.NUMBER},
new int[] { R.id.text_name, R.id.text_phone });
setListAdapter(adapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
Das Ergebnis sieht irgendwie aus wie das, was ich will, aber wie es aussieht ist die Liste nicht weiß, welches Element ausgewählt wird. Außerdem muß ich auf genau auf die CheckBox
. In der List11 Beispiel brauche ich nur zu klicken Sie auf das Element Zeile.
Also, was muss ich tun, um eine multiple-choice-Liste mit meinen benutzerdefinierten Ansicht für jede Zeile? Vielen Dank.
InformationsquelleAutor der Frage Phil | 2010-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie Ihren eigenen
RelativeLayout
implementiert, dass dasCheckable
- Schnittstelle und einen Verweis auf dieCheckBox
oder dieCheckedTextView
(oder eine Liste, wenn es multiple-choice-Modus).Blick auf diesen Beitrag:
http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/
InformationsquelleAutor der Antwort Fernando Gallego
Die Antwort von Rahul Garg ist gut für das erste mal, die Liste wird geladen, wenn Sie einige Zeilen, die geprüft werden-je nach Modell-Daten, aber nach, dass Sie haben, um die aktivieren/deaktivieren Sie die Ereignisse selbst.
Können Sie überschreiben die
onListItemCLick()
desListActivity
zu aktivieren/deaktivieren Sie die ZeilenWenn Sie dies tun, stellen Sie nicht die
ListView
zuCHOICE_MODE_MULTIPLE
denn Sie macht seltsame Dinge, wenn Sie die Funktion aufrufen.Abrufen die Liste der zu überprüfenden Zeilen, implementieren Sie eine Methode sich selbst aufrufen
getCheckItemIds()
auf dieListView
funktioniert nicht:InformationsquelleAutor der Antwort JVitela
Nein, tut es nicht. Es hat eine
CheckedTextView
.Versuchen, indem Sie die
CheckBox
android:id
Wert sein"@android:id/text1"
und sehen, ob das hilft. Das ist die ID von Android für dieCheckedTextView
imsimple_list_item_multiple_choice
.InformationsquelleAutor der Antwort CommonsWare
Die Lösung ist, um eine benutzerdefinierte Ansicht erstellen, die die Klickbare Oberfläche.
Und erstellen Sie ein benutzerdefiniertes layout für die Elemente der Liste mit dem neuen widget.
Dann erstellen Sie eine neue benutzerdefinierte Adapter mit dem layout oben.
InformationsquelleAutor der Antwort Adorjan Princz
Ist es möglich, durch einige trick
in Ihrem ListActivtyClass in Methode
nun in Sie benutzerdefinierte Adapter
diese Weise können Sie anpassen, die anzeigen, in-adapter, wenn das Element in der Liste ausgewählt ist.
InformationsquelleAutor der Antwort Rahul Garg
Einfaches Beispiel, wie man ein eigenes layout zu arbeiten als benutzerdefinierte Kontrollkästchen:
InformationsquelleAutor der Antwort Adorjan Princz
Ich fand es sehr nützlich, diesen kleinen code: http://alvinalexander.com/java/jwarehouse/apps-for-android/RingsExtended/src/com/example/android/rings_extended/CheckableRelativeLayout.java.shtml
Es ist eine großartige Ergänzung zu @ferdy182 's http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/ Inhalt.
InformationsquelleAutor der Antwort russellhoff
Hab die Lösung ... Sie können die Klicks auf die Ansichten (wie Checkboxen, benutzerdefinierte layouts der Zeile), indem ein listener, um jeden von Ihnen in den adapter selbst, während Sie wieder die konvertierte Ansicht in getView(). Möglicherweise müssen Sie übergeben eine Referenz-Liste-Objekt, wenn Sie Absicht zu bekommen, eine Liste mit spezifischen Informationen. wie Zeilen-id.
InformationsquelleAutor der Antwort Pritam
Möchte ich bestätigen, dass die Pritam ' s Antwort ist richtig. Sie benötigen eine
onClickListener
auf jede Liste Element (definieren Sie es in den adapter zugetView()
).Können Sie erstellen eine neue
onClickListener()
für jedes Element, oder haben die adapter implementierenonClickListener()
- in diesem Fall die Elemente müssen markiert sein für die listener, um zu wissen, welchen Artikel Sie auf.Sich auf der Liste
onItemClickListener()
- als jemand riet in einem anderen thread - wird nicht funktionieren, da derCheckBox
fängt das click-Ereignis, so wird die Liste nicht bekommen.Und schließlich @Rahul und JVitella:
Der situation ist, dass die
CheckBox
auf ein Listenelement muss angeklickt werden und überprüfbar, unabhängig von der Liste Element selbst. Deshalb die Lösung ist, wie ich gerade oben beschrieben.InformationsquelleAutor der Antwort Yar