簡體   English   中英

在動態創建的UI中保存和還原實例狀態?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM