Wie Sie wissen, wenn ein Android ListView-Steuerelement getan wird aufgefüllt
Ich habe ein Kind-Aktivität enthält eine ListView. Diese Aktivität wird asynchron aufgefüllt wird aus einer SQLite-cursor. Die list-Elemente enthalten eine TextView, ein RadioButton, und ein normaler Knopf. Der XML-Code wird unten dargestellt:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/rlCategoryListItemLayout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:id="@+id/tvCategoryListItemTitle" style="@style/uwLargeListItemLabelStyle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:singleLine="true" android:text="This is a test note title" />
<LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:gravity="center_vertical">
<RadioButton android:id="@+id/rdoCategoryListItemSelect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="10dip" />
<Button android:id="@+id/btnCategoryListItemDelete" android:background="@drawable/delete_red" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" />
</LinearLayout>
</RelativeLayout>
Habe ich zu tun, etwas Logik, um zu bestimmen, welcher RadioButton ist standardmäßig aktiviert, und ich kann es nicht tun, bis die ListView ist bereits geladen. Das problem ist, dass alle Veranstaltungen, die ich bisher ausprobiert habe (onCreate, onPostCreate, onResume, onWindowFocusChanged), die ListView-Kind-count gleich null ist. Ich habe auch versucht, mit Hilfe der getView-Methode in der ArrayAdapter-Klasse, aber dass die Methode aufgerufen wird, mehrere Male, und die ListView-Kind zählen ist potenziell jedes mal anders, was zu unerwarteten Ergebnissen führt. Anscheinend sind die events feuern, bevor das ListView hat fertig komplett Auffüllen mit seine Kind-Elemente.
Gibt es ein Ereignis, ich kann es hören, oder auf eine andere Weise, um zu bestimmen, wenn das ListView-Steuerelement fertig Auffüllen und hat alle seine Kinder erreichbar zu sein programmgesteuert geändert werden?
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen Handler um diese Aufgabe zu erfüllen, wie diese:
In Ihrer Aktivität hinzufügen der Ereignishandler, wie jede andere Eigenschaft.
Innen die getView-Methode des listview-adapter, den Sie tun, den Vergleich zu sehen, wenn die aktuelle position ist die Letzte , also wird es beenden (legen Sie es vor der Rückkehr):
getView(
in meinemListView.java
; wo genau ist diese Methode?Am Ende der asynchronen arbeiten an der Datenbank, die Sie verwenden können
Handler.post(Runnable)
code ausführen zurück auf den Haupt-thread.Es ist fast so, wie die Auslösung eines callback, das Sie garantieren können, die ausgeführt wird, nachdem die Liste gefüllt ist. Sie können planen, die Runnable auftreten zu einer bestimmten Zeit, wenn Sie brauchen, um alles sehr sorgfältig.
Ich hoffe, das war hilfreich.
Einer ListView nicht wirklich eine Ansicht erstellen, die für jedes element in der Liste der Daten, die es Rendern. Stattdessen recycelt Blick, um zu reagieren und nicht hog-Speicher. Könnten Sie überdenken, was Sie wirklich brauchen, wenn Sie sagen, dass die ListView muss aufgefüllt werden.
Könnte es helfen, wenn Sie gehen in ein wenig mehr Details über Ihre app und post-code.
Können Sie eine string-variable in Ihrer Aktivität (z.B.
public static String END_LOAD
), und setzen Sie den Wert in der getView-Methode (in die adapter), dann in Ihrer Tätigkeit, nachKönnen Sie einen einfachen thread, überprüfen Sie die END_LOAD variable:
Fügen Sie eine einfache Bedingung, die für Sie interessant sein, dann, wenn die Bedingung false ist, weil die getView-Methode ist fertig, jetzt können Sie für Ihren spezifischen Prozess.