Ich versuche, ein ListView in einem LinearLayout zu simulieren, um drei Zeilen mit identischem Layout anzuzeigen. Diese Ansicht besteht aus einer Bewertungsleiste und einem Inhalt. Es ist sehr seltsam, aber alle ratingBars erhalten den letzten zugewiesenen Wert. Zunächst einmal ist dies meine benutzerdefinierte Komponente, die Linearlayout diese beiden Methoden nur das Hinzufügen erweitert:Programmgesteuertes Hinzufügen von Ansicht in ein LinearLayout
public void setElements(List<Item> elements) {
removeAllViews();
for (int i = 0; i < elements.size() && i < 3; i++) {
View vi = buildElementView(elements.get(i));
vi.setId(i);
addView(vi);
}
}
private View buildElementView(Item itemElement) {
View view = inflater.inflate(R.layout.element_list_item, null, true);
// set values
View header = view.findViewById(R.id.header);
RatingBar ratingInItem = (RatingBar) header.findViewById(R.id.ratingBarInItem);
TextView content = (TextView) view.findViewById(R.id.content);
content.setText(itemElement.getContent());
ratingInItem.setRating(itemElement.getRating());
return view;
}
und dieses ist das Layout ich Aufpumpen bin:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.weorder.client"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:minHeight="60.0dp"
android:orientation="vertical"
android:paddingBottom="8.0dp"
android:paddingLeft="5.0dp"
android:paddingRight="5.0dp"
android:paddingTop="8.0dp" >
<RelativeLayout
android:id="@+id/header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RatingBar
android:id="@+id/ratingBarInItem"
style="@style/RatingBarSm"
android:isIndicator="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:numStars="5"
android:stepSize="0.1" />
</RelativeLayout>
<TextView
android:id="@+id/content"
style="@style/Content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:layout_marginTop="3dp"
android:textColor="@color/dark_brown"
android:textSize="@dimen/text_size_small" />
</LinearLayout>
ich die setElements Methode innerhalb onActivityCreated() aufrufen, in das Fragment. Es funktioniert gut, wenn das Fragment startet, aber wenn ich versuche, das Telefon zu drehen, ändert sich der Inhalt der Elemente richtig, aber die Bewertungsleiste erhält den letzten Wert (wenn es drei Elemente mit der Bewertung 1,2 und 3 gibt, haben alle Bewertungsleisten 3 Sterne) . Ist es ein Fehler?
EDIT: Das ist mein onSaveInstanceMethod:
@Override
public void onSaveInstanceState(Bundle outState) {
if (elements != null) {
outState.putSerializable("elements", elements);
}
super.onSaveInstanceState(outState);
}
Dank
Wie speichern Sie die Bewertungen wieder herzustellen, wenn die Aktivität getötet ? – znat
Die Bewertungen werden aus dem Netzwerk abgerufen und mithilfe von onsaveinstancestate gespeichert – Matroska
Können Sie diesen Teil des Codes teilen? (onsaveinstance) – znat