![](/img/trans.png)
[英]Testing a Fragment's onCreate method with a savedInstanceState Bundle in Robolectric?
[英]What's onCreate(Bundle savedInstanceState)
誰能幫助我了解的Bundle savedInstanceState
中onCreate(Bundle savedInstanceState)
我在Android的新手。 我試着從 developer.android.com 理解它。 但我無法理解。 任何人都可以簡化它嗎?
如果您將應用程序的狀態保存在一個包中(通常是onSaveInstanceState
非持久性動態數據),如果需要重新創建活動(例如,方向更改),則可以將其傳遞回onCreate
,這樣您就不會丟失這個先驗信息。 如果未提供數據,則savedInstanceState
為空。
...您應該使用 onPause() 方法將任何持久數據(例如用戶編輯)寫入存儲。 此外,在將活動置於這種后台狀態之前調用方法 onSaveInstanceState(Bundle),允許您將活動中的任何動態實例狀態保存到給定的 Bundle 中,以便稍后在 onCreate(Bundle) 中接收,如果活動需要重新創建。 有關流程的生命周期如何與其托管的活動相關聯的更多信息,請參閱流程生命周期部分。 請注意,在 onPause() 而不是 onSaveInstanceState(Bundle) 中保存持久數據很重要,因為后者不是生命周期回調的一部分,因此不會在其文檔中描述的所有情況下都被調用。
onCreate(Bundle savedInstanceState)
當活動第一次開始時你會得到Bundle
null,當活動方向改變時它會被使用......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android 提供了另一種優雅的方式來實現這一點。 為了實現這一點,我們必須重寫一個名為onSaveInstanceState()
的方法。 Android 平台允許用戶保存任何實例狀態。 實例狀態可以保存在 Bundle 中。 Bundle 作為參數傳遞給 onSaveInstanceState 方法。
我們可以從作為參數傳遞給onCreate
方法的 Bundle 加載保存的實例狀態。 我們還可以在onRestoreInstanceState
方法中加載保存的實例狀態。 但我會把它留給讀者去弄清楚。
正如 Dhruv Gairola 回答的那樣,您可以使用 Bundle savedInstanceState 來保存應用程序的狀態。 我試圖舉一個非常簡單的例子,像我這樣的新學習者可以很容易地理解。
假設您有一個帶有 TextView 和 Button 的簡單片段。 每次單擊按鈕時,文本都會更改。 現在,改變你的設備/模擬器的方向,並注意到你丟失了數據(意味着點擊后你得到了更改的數據)並且片段再次作為第一次啟動。 通過使用 Bundle savedInstanceState 我們可以擺脫這個。 如果你看一下片段的生命周期。 Fragment Lifecylce你會得到一個方法“onSaveInstanceState”在片段即將被銷毀時被調用。
所以,我們可以像這樣保存狀態意味着改變的文本值到那個包中
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
確定方向后,將調用“onCreate”方法對嗎? 所以我們可以這樣做
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
現在,您不會在定向后失去價值。 將始終顯示修改后的值。
Android 中的 onCreate(Bundle savedInstanceState) 函數:
當 Activity 首次調用或啟動時,onCreate(Bundle savedInstanceState) 方法負責創建該 Activity。
當活動的方向(即從水平到垂直或從垂直到水平)改變或當活動被任何操作系統強行終止時,savedInstanceState 即捆綁類的對象將保存活動的狀態。
Orientation 更改后,onCreate(Bundle savedInstanceState) 將調用並重新創建活動並從savedInstanceState 加載所有數據。
基本上 Bundle 類用於在應用程序中發生上述情況時存儲活動數據。
應用程序不需要 onCreate()。 但是在 app 中使用它的原因是因為該方法是放置初始化代碼的最佳位置。
您也可以將初始化代碼放在 onStart() 或 onResume() 中,當您的應用程序首先加載時,它的工作方式與 onCreate() 中的相同。
onCreate(Bundle)
在活動第一次啟動時被調用。 您可以使用它來執行一次性初始化,例如創建用戶界面。 onCreate()
接受一個參數,該參數為 null 或一些先前由onSaveInstanceState
保存的狀態信息。
onCreate(Bundle savedInstanceState) 被調用並且如果您的活動在上述場景(可視化視圖)中終止,則savedInstanceState 將是非空的。 然后,您的應用程序可以從savedInstanceState 中抓取(捕獲)數據並重新生成您的活動
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.