我正在尝试保存许多动态膨胀视图的状态(如在改变屏幕方向时保持其值)。我四处张望,但仍未找到解决问题的答案。
我在片段中充气的商品的XML
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border"
android:layout_marginTop="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/ingredient_name1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/ingredient_hint"
android:inputType="text" />
<Spinner
android:id="@+id/ingredient_category1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:entries="@array/categories" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/measure_amount1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/num_hint"
android:inputType="numberDecimal" />
<Spinner
android:id="@+id/measure_type1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:entries="@array/measurements" />
</LinearLayout>
</LinearLayout>
因此,我在此片段中有一个静态变量,该变量可以统计有多少个静态变量,以及大于零的静态变量。在循环中重新创建视图以获取尽可能多的视图:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.new_recipe,container,false);
mainLayout = view.findViewById(R.id.ingredient_layout);
newIngredientButton = view.findViewById(R.id.new_ingredient);
ScrollView scrollView = view.findViewById(R.id.ingredient_sv);
//Re-create the items if we have more than 0
if (ingredientCount > 0) {
for (int i = 0; i < ingredientCount; i++) {
View newItem = LayoutInflater.from(getContext()).inflate(R.layout.ingredient_item,
mainLayout, false);
newItem.setId(i);
mainLayout.addView(newItem);
}
}
//OnClick to inflate the item
newIngredientButton.setOnClickListener(l -> {
View newItem = LayoutInflater.from(getContext()).inflate(R.layout.ingredient_item,
mainLayout, false);
newItem.setId(ingredientCount);
mainLayout.addView(newItem);
scrollView.post(() -> scrollView.fullScroll(View.FOCUS_DOWN));
ingredientCount++;
});
return view;
}
最佳答案
如果我了解您要执行的操作,那么您根本不应该这样做。除了跟踪和重新创建有关屏幕方向变化的所有视图和数据外,
这将是最容易添加的android:configChanges="orientation|screenSize"
到活动中的清单。这样可以防止您的应用在方向更改时重新启动,然后您可以处理要在方法中进行的所有更改
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
...
}
或者,您可以保留该片段,并在重新启动时对其进行检索,如本链接中所述
https://developer.android.com/guide/topics/resources/runtime-changes.html