2013-05-01 57 views
0

如何保存所有字段的狀態,我在我的類中擴展了View?在View類中保存所有字段的狀態 - Android

@Override 
protected Parcelable onSaveInstanceState() { 
    Parcelable localState = super.onSaveInstanceState(); 

    Bundle bundle = new Bundle(); 
    bundle.putSerializable("gameEngine", this.gameEngine); 
    bundle.putParcelable("inherited", localState); 
    return bundle; 
} 

@Override 
protected void onRestoreInstanceState(Parcelable localState) { 
    Bundle bundle = (Bundle) localState; 
    this.gameEngine = ((GameEngine) bundle.getSerializable("gameEngine")); 
    super.onRestoreInstanceState(bundle.getParcelable("inherited")); 
} 

這似乎並不拯救領域。

謝謝。

回答

0

將所有值放入數組中並手動恢復它們。
或將它們存儲在自定義類中。

或者如果你只有幾個值把它們放在一個軟件包中一個:

bundle.putString("1", value); 
bundle.putString("2", value); 
etc. 
+0

這個答案是正確的,但是對於需要存儲大量變量的人來說,這可能不是最好的解決方案。 另外我發現你不能把一個多維數組放在包中。我不得不創建一個算法來將多重拼合成一個單獨的用於存儲,然後將另一個重新組合成多個用於恢復。 謝謝:) – Waddas 2013-05-02 00:25:43

+0

據我所知,這是做到這一點的唯一方法。 您可以將putSerializable用於多維數組。請注意,通過Bundle的所有內容都被序列化(克隆),因此所有對其他活動的引用都將丟失。您可以使用靜態變量來保留它們。 對於最近的答案抱歉,我來自歐洲。 – PhpXp 2013-05-02 07:48:16

0

它可能不是在單個視圖對象內完成此操作的最佳解決方案。從片段或包含視圖的活動中保存視圖的狀態會更容易。片段和活動都提供了遵循示例代碼中使用的模式來保留狀態實例的方法。

+0

我怎麼會做這種從活動中? – Waddas 2013-05-01 18:46:41

+0

使用onCreate和onSaveInstanceState。他們在你的例子中以你想要的方式使用一個包。 – Snicolas 2013-05-01 19:41:19

+0

看看這個主題:http://stackoverflow.com/a/151940/693752 – Snicolas 2013-05-01 19:45:48