2014-10-27 110 views
1

我需要保存,我在一個片段使用,所以它不會丟失自定義對象當屏幕旋轉時(當應用程序調用的onDestroy然後召回的onCreate)如何保存自定義的onSaveInstanceState對象,而不執行parcelable

現在正常的做法是實現Parcelable接口並將其作爲Parcelable對象保存到包中。

這是一個非常繁瑣的做事方式。

有沒有一種方法可以像「putObject」方法一樣傳遞對象?

回答

-1

以及搜索,我發現這樣做的沒有正式的方式,所以這裏有兩個「黑客」我發現身邊的問題:

1)創建一個擴展應用程序類,在其添加對象的ArrayList類。 電話的onSaveInstanceState裏面:

getApplication().getObjectArray().add(YourObject); 

保存使用putInt捆裏面的對象指數。

將它解壓縮到方法onReturnestoreInstanceState中。

2)我不太喜歡的一個:

機器人會自動保存其觀點 和各州爲此,以此來拯救的對象將是創建一個視圖設置它的知名度沒有那麼它不會顯示在屏幕上那麼,我們希望每個對象添加到使用方法的觀點:

view.setTag(key,Object); or view.setTag(Object); 

現在裏面onReturnestoreInstanceState獲取視圖並提取標籤。

不幸的是我無法找到保存對象

希望更簡單的方式這一個可以幫助你(在我的應用我結束了使用第一種方法)

+1

你好,哈克先生! – 2015-12-10 09:57:00

+0

我不會認爲這種方法是可讀和可維護的,KISS! – Eido95 2016-11-22 22:18:27

1

最好的辦法是實行Parcelable(更快)。

更簡單(效率不高)的方法是實現Serializable並將該對象作爲可序列化添加到捆綁包中。

+0

必須爲您傳遞的每個對象執行parcelable,如果您需要傳遞幾個由多個字段或子對象組成的對象,則必須執行大量工作。 – 2014-10-27 07:59:35

+0

同意。如果你需要一個更簡單的解決方案,你可以實現Serializable接口。它雖然效率不高。 – km86 2014-10-27 08:01:07

+0

這就是爲什麼最後我一起避免了這個問題,並在應用程序類中創建了對象數組,我將它用作itermediate,因爲它應該是可用的,除非應用程序已關閉,我存儲該對象,然後從中抽取if沒有任何喧囂 – 2014-10-27 08:06:25

2

您可以將數據保存在碎片中,在配置更改期間保留,如example

擴展Fragment類並聲明對有狀態 對象的引用。

public class RetainedFragment extends Fragment { 
    // data object we want to retain 
    private MyDataObject data; 
    // this method is only called once for this fragment 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // retain this fragment 
     setRetainInstance(true); 
    } 
    .. getter and setter 
} 

然後使用FragmentManager的片段添加到活動中。

public class MyActivity extends Activity { 

    private RetainedFragment dataFragment; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     ..  
     // find the retained fragment on activity restarts 
     FragmentManager fm = getFragmentManager(); 
     dataFragment = (RetainedFragment) fm.findFragmentByTag(「data」); 

     // create the fragment and data the first time 
     if (dataFragment == null) { 
      // add the fragment 
      dataFragment = new DataFragment(); 
      fm.beginTransaction().add(dataFragment, 「data」).commit(); 
     } else { 
      // available dataFragment.getData() 
      .. 
      // save data in onDestroy dataFragment.setData(yourData); 
+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – 2015-07-18 07:37:45

+0

感謝U 4的建議。我會嘗試) – 2015-07-18 12:12:20

相關問題