2014-07-18 52 views
0

我想知道什麼是在Android中存儲複雜數據類型的變量的最佳方法。 onSaveInstanceState()只能用於簡單的數據類型,比如字符串,整數等,但如果我想這樣保存別的東西,我該怎麼辦?在取向變化方面持續複雜的數據

這是我目前所知的方法:在數據庫

  1. 保存並恢復它
  2. 創建一個JSON和保存在數據庫或共享偏好的JSON字符串。
  3. 使用靜態變量(不推薦,因爲可能的內存泄漏和其他不受歡迎的行爲)
  4. 使其成爲parceable

我不滿意無論是上面提到的方法之一,所以我要尋找一個不同的,更通用的方法。例如,如果我想保存一個包含片段的ArrayList,我該怎麼做(讓我們不要討論爲什麼我會這樣做,並且讓我們假裝沒有像片段管理器那樣的)。

回答

0

我相信,如果你可以做一個類parcelable你可以在同一個OnsaveInstanceState

@Override 
protected void onSaveInstanceState(Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 
    try 
    { 


     outState.putParcelable("ListViewFragment", (Parcelable) mLeftMenuFragment); 
     outState.putParcelable("ProductsGridFragment", (Parcelable) mProductsGridFragment); 
     outState.putParcelable("ProductDetailsFragment", (Parcelable) mProductDetailsFragment); 
     outState.putParcelable("FeaturedFragment", (Parcelable) mFeaturedFragment); 
     outState.putParcelable("CategoryFragment", (Parcelable) mCategoryFragment); 

    } 
    catch(Exception e) 
    { 
     mLogger.error(Logger.ERROR_CODE_API, e); 
    } 
} 

相同存儲爲下面讓他們回來如下

if(savedInstanceState != null) 
     { 
      isFeaturedProduct = savedInstanceState.getBoolean("IsFeaturedProduct"); 
      mLeftMenuFragment = (LeftMenuFragment) savedInstanceState.getParcelable("ListViewFragment"); 
      mProductsGridFragment = (ProductListFragment) savedInstanceState.getParcelable("ProductsGridFragment"); 
      mProductDetailsFragment = (ProductDetailsFragment) savedInstanceState.getParcelable("ProductDetailsFragment"); 
      if(isFeatured) 
       mFeaturedFragment = (FeaturedFragment) savedInstanceState.getParcelable("FeaturedFragment"); 
      else 
       mCategoryFragment = (CategoryFragment) savedInstanceState.getParcelable("CategoryFragment"); 
      // mActionBar.setTitle(savedInstanceState.getString("ActionBarTitle")); 
     } 
     else 
     { 
      mLeftMenuFragment = new LeftMenuFragment(); 
      mProductsGridFragment = new ProductListFragment(); 
      mProductDetailsFragment = new ProductDetailsFragment(); 
      if(isFeatured) 
      { 
       mFeaturedFragment = new FeaturedFragment(); 
      } 
      else 
      { 
       mCategoryFragment = new CategoryFragment(); 
      } 
      mIsFeaturedClicked = true; 
     } 
+0

謝謝您的回答。我忘了提及我已經嘗試parceable,但它仍然看起來像一個相當繁瑣的方法,我必須使每個自定義數據類型parceable。 真的沒有其他辦法嗎?我的意思是,不是定向改變的慣例?! – deimos1988