2015-04-30 94 views
0

我想發送一個束內的視圖列表,所以可以使用它在被銷燬之前的值來重建活動,例如當用戶旋轉設備時,但是我開始在檢索視圖時出錯。那麼可以使用這種方法?可以序列化視圖列表嗎?

PS。我沒有發佈代碼,因爲我認爲這是不必要的,如果你們認爲閱讀代碼會很好,請提出要求,我會更新問題。

+0

「可以使用這種方法嗎?」 - 哦,'$ DEITY',沒有。 – CommonsWare

回答

0

可以序列化數據視圖需要重新繪製自己並恢復其狀態,如果列表的大小不是很大。你不應該序列化視圖本身。

當你序列數據太多,你就會知道爲您的應用程序會崩潰:)

當有太多的數據,使用SQL代替或只是告訴你的活動或片段不破壞自己和避免這種麻煩共。

+0

我序列化視圖本身,它的工作正常的意見,但我試圖序列化一個RecyclerView,它墜毀.. :( –

+0

我知道它工作正常,但recyclerview做了一個很好的工作來繪製它們。通過保存的意見,而不是重新繪製它們的重要,更多的只是保持文本,檢查狀態,... –

2

你似乎有正確的想法,但不正確的實施。使用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的就足夠足夠了。

+0

我絕對同意這種做法,必須存儲視圖是不正確的路要走。 'onSaveInstance()'你也可以使用'onPause()'和'onResume()'分別存儲和檢索數據 – ngoa

+0

是的,很好,但我真的不想在每一個活動/片段上實現它創建,我需要更通用的東西,這就是爲什麼我序列化視圖,但我可以使用地圖,並序列化它的值,這可能會起作用。感謝您的幫助 –

+0

@Marcos您的想法並不合適。如果這是您通常會做的事情,那麼如何在BaseActivity中使用我的邏輯,您可以將其擴展出來,以便您可以爲所需的其他任何活動提供相同的代碼空間。您無需在每個活動/片段中實施它,只需要擴展BaseActivity。 – portfoliobuilder

0

如果要保存活動的狀態,請將其保存到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

相關問題