我正在创建一个Android应用,其活动包含静态视图和动态创建的视图。该活动包含XML文件中保存的UI元素和基于模型类内容动态创建的UI元素。 (例如,我的模型类中有一个数组,将为数组中的每个元素创建一个EditText ..并且将创建一个包含不同数组中每个元素的Spinner)
在涉及动态创建的UI元素时,保存和恢复应用程序状态的常用方法是什么?因为我不会总是知道任何时候会存在哪些UI元素!目前,我的绑定代码只是在设备方向改变时重新加载数据库中的数据,丢失了用户所做的任何更改。
我已经对Google / SO进行了很好的了解,我没有发现与此问题相关的任何内容。
全部谢谢
修改 对于未来遇到这种情况的任何人,我对Yakiv的方法做了一个略微修改的版本,并结束了这个:
for (int i = 0; i < views.size(); i++) {
View currentView = views.get(i);
if (currentView instanceof CheckBox) {
outState.putBoolean("VIEW"+i, (((CheckBox) currentView).isChecked()));
} else if (currentView instanceof EditText) {
outState.putString("VIEW"+i, ((EditText) currentView).getText().toString());
} else if (currentView instanceof Spinner) {
//.....etc. etc.
}
}
再次感谢Yakiv提供了很棒的想法。
答案 0 :(得分:0)
要恢复动态视图状态,您需要将其设为class fields
并在onCreate
中对其进行初始化。然后使用this文章保存并恢复其状态。
private List<View> mViews= new ArrayList<View>();
@Override
public void onCreate(..)
{
LinearLayout parent = ....//initialize it here
initializeViews();
}
public void initializeViews()
{
// create and add 10 (or what ever you need) views to the list here
mViews.add(new View(this));
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
int mViewsCount = 0;
for(View view : mViews)
{
savedInstanceState.putInt("mViewId_" + mViewsCount, view.getId());
mViewsCount++;
}
savedInstanceState.putInt("mViewsCount", mViewsCount);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int mViewsCount = savedInstanceState.getInt("mViewsCount");;
for(i = 0; i <= mViewsCount)
{
View view = mViews.get(i);
int viewId = savedInstanceState.getInt("mViewId_" + i);
view.setId(viewId);
mViewsCount++;
}
}
祝福。