我想發送一個束內的視圖列表,所以可以使用它在被銷燬之前的值來重建活動,例如當用戶旋轉設備時,但是我開始在檢索視圖時出錯。那麼可以使用這種方法?可以序列化視圖列表嗎?
PS。我沒有發佈代碼,因爲我認爲這是不必要的,如果你們認爲閱讀代碼會很好,請提出要求,我會更新問題。
我想發送一個束內的視圖列表,所以可以使用它在被銷燬之前的值來重建活動,例如當用戶旋轉設備時,但是我開始在檢索視圖時出錯。那麼可以使用這種方法?可以序列化視圖列表嗎?
PS。我沒有發佈代碼,因爲我認爲這是不必要的,如果你們認爲閱讀代碼會很好,請提出要求,我會更新問題。
可以序列化數據視圖需要重新繪製自己並恢復其狀態,如果列表的大小不是很大。你不應該序列化視圖本身。
當你序列數據太多,你就會知道爲您的應用程序會崩潰:)
當有太多的數據,使用SQL代替或只是告訴你的活動或片段不破壞自己和避免這種麻煩共。
我序列化視圖本身,它的工作正常的意見,但我試圖序列化一個RecyclerView,它墜毀.. :( –
我知道它工作正常,但recyclerview做了一個很好的工作來繪製它們。通過保存的意見,而不是重新繪製它們的重要,更多的只是保持文本,檢查狀態,... –
你似乎有正確的想法,但不正確的實施。使用onSaveInstanceState,如果你想,你可以把東西放入你的Bundle。讓我們舉一個更實際的例子,比如一個字符串值。
private TextView mTextView;
private static final String KEY_TEXT_VALUE = "keyTextValue";
@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_TEXT_VALUE, mTextView.getText());
}
每當Android的破壞並重新創建你的活動進行定向改變它摧毀調用之前的onSaveInstanceState()和創建後調用的onCreate()。所以,如果你願意,你可以如果你有大量的數據,你可以考慮建立某種形式的緩存中檢索的onCreate()像這樣保存的信息,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = (TextView) findViewById(R.id.main);
if (savedInstanceState != null) {
String savedText = savedInstanceState.getString(KEY_TEXT_VALUE);
// do something with savedText
}
}
,SQLite的就足夠足夠了。
我絕對同意這種做法,必須存儲視圖是不正確的路要走。 'onSaveInstance()'你也可以使用'onPause()'和'onResume()'分別存儲和檢索數據 – ngoa
是的,很好,但我真的不想在每一個活動/片段上實現它創建,我需要更通用的東西,這就是爲什麼我序列化視圖,但我可以使用地圖,並序列化它的值,這可能會起作用。感謝您的幫助 –
@Marcos您的想法並不合適。如果這是您通常會做的事情,那麼如何在BaseActivity中使用我的邏輯,您可以將其擴展出來,以便您可以爲所需的其他任何活動提供相同的代碼空間。您無需在每個活動/片段中實施它,只需要擴展BaseActivity。 – portfoliobuilder
如果要保存活動的狀態,請將其保存到onSaveInstanceState(Bundle savedInstanceState)
方法中,此方法屬於Activity類。例如:
savedInstanceState.putString(USER_NAME, myEditText.getText.toString());
在onCreate()
方法,你可以檢索你的數據是這樣的:
if (savedInstanceState != null) {
// restore as many values from views as you need
mUserName = savedInstanceState.getString(USER_NAME);
}
您也可以考慮使用此行代碼。
android:configChanges="orientation|keyboardHidden"
這會阻止您的應用在方向更改時重置您的數據。
另請參閱此tutorial。
「可以使用這種方法嗎?」 - 哦,'$ DEITY',沒有。 – CommonsWare