1

我有一個ViewPager與一些片段,其中用戶輸入不同的輸入。其中一個片段包含我存儲的DatePickerTimePicker(當用戶選擇日期和時間時)作爲Joda LocalDateLocalTimeSavedInstanceState不爲空,但爲空

我想保存日期和時間爲了保持輸入,即使用戶在片段之間滑動。這裏是我的代碼:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    if (selectedDate != null && selectedTime != null) { 
     outState.putString("date", selectedDate.toString()); 
     outState.putString("time", selectedTime.toString()); 
     super.onSaveInstanceState(outState); 
    } 
} 

在我onCreateView

if (savedInstanceState != null){ 
    Log.d("mylog", savedInstanceState.getString("date"); 
    currentDate = LocalDate.parse(savedInstanceState.getString("date")); 
    currentTime = LocalTime.parse(savedInstanceState.getString("time")); 
    selectedDateTv.setText(currentDate.toString("dd/MM/yyyy")); 
    selectedTimeTv.setText(currentTime.toString("HH:mm")); 
} else { 
    //My code 
} 

我面對的是,如果用戶到達這個片段,但不輸入任何輸入,然後刷一下後面的問題到前面的片段,然後到選擇日期和時間片段,應用程序在我的LogonCreateView處崩潰。

我不明白爲什麼如果我嘗試避免保存數據,如果我的selectedDate和selectedTime爲空,當重新創建片段時,bundle與null不同(當然鍵值對不存在)。

你能給我一個如何解決這個問題的方法嗎?我希望對此行爲有任何解釋。

+0

以這樣的方式將這些行不應該運行,如果它爲空或包含在嘗試捕捉包括條件塊 –

回答

2

Bundle不是null配置更改後,因爲你Fragment實現不使用它的唯一的一個。以下報價是從documentationActivity,但它是有效的Fragment爲好,在Handling Runtime Changes說:

然而,即使你什麼也不做,不實現的onSaveInstanceState(),一些活動狀態的是由Activity類的onSaveInstanceState()的默認實現恢復。具體而言,默認實現爲佈局中的每個視圖調用相應的onSaveInstanceState()方法,從而允許每個視圖提供有關應該保存的有關自身的信息。

所以除了確保該Bundlenull,你應該檢查是否有鍵「日期」和「時間」的演員在那裏的。當您要保存這兩個鍵或者沒有,就足夠了檢查其中的一個:

if (savedInstanceState != null 
    && savedInstanceState.containsKey("date") 
    ){ 
    Log.d("mylog", savedInstanceState.getString("date"); 
    currentDate = LocalDate.parse(savedInstanceState.getString("date")); 
    currentTime = LocalTime.parse(savedInstanceState.getString("time")); 
    selectedDateTv.setText(currentDate.toString("dd/MM/yyyy")); 
    selectedTimeTv.setText(currentTime.toString("HH:mm")); 
} 
else { 
    //My code 
} 
0

改變你的方法,如下面

@Override 
public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    if (selectedDate != null && selectedTime != null) { 
     outState.putString("date", selectedDate.toString()); 
     outState.putString("time", selectedTime.toString()); 

    } 
} 
相關問題