[英]Saving and restoring instance state in dynamically created UI?
我正在創建一個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的出色建議。
要恢復動態視圖狀態,您需要將它們設置為class fields
,並在onCreate
對其進行初始化。 然后,只需使用此文章來保存和恢復它們的狀態。
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++;
}
}
最好的祝願。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.