Я пытаюсь имитировать ListView в LinearLayout, чтобы показать три строки с одинаковым расположением. Этот единственный вид состоит из панели оценки и контента. Это очень странно, но все рейтинговые бары получают последнее присвоенное значение. Прежде всего это мой пользовательский компонент, который расширяет LinearLayout просто добавив эти два метода:Программно добавить представление в 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;
}
и это расположение я накачивания:
<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>
я вызываю метод setElements внутри onActivityCreated() в фрагмент. Он работает хорошо, когда начинается фрагмент, но когда я пытаюсь повернуть телефон, содержимое элементов изменяется должным образом, но панель рейтинга получает последнее значение (если есть 3 элемента с рейтингом 1,2 и 3, все рейтинговые бары имеют 3 звезды) , Это ошибка?
EDIT: это мой onSaveInstanceMethod:
@Override
public void onSaveInstanceState(Bundle outState) {
if (elements != null) {
outState.putSerializable("elements", elements);
}
super.onSaveInstanceState(outState);
}
Благодаря
Как сохранить рейтинги, когда активность убит ? – znat
Рейтинги извлекаются из сети и сохраняются с помощью onsaveinstancestate – Matroska
Можете ли вы поделиться этой частью кода? (Onsaveinstance) – znat