gpt4 book ai didi

android - SavedInstanceState 不为空但为空

转载 作者:行者123 更新时间:2023-11-29 17:14:30 25 4
gpt4 key购买 nike

我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日期和时间时)作为 Joda LocalDate本地时间

我想保存日期和时间,以便即使用户在 fragment 之间滑动也能保持输入。这是我的代码:

@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
}

我面临的问题是,如果用户到达此 fragment 但未输入任何内容,然后向后滑动到之前的 fragment 并向前滑动至选择的日期和时间 fragment ,应用程序会在我的 Log 上崩溃 行在 onCreateView

我不明白为什么如果我在 selectedDate 和 selectedTime 为 null 时尝试避免保存数据,当重新创建 fragment 时,bundle 与 null 不同(当然键值对不存在) .

你能给我一个解决这个问题的方法吗?如果对此行为有任何解释,我将不胜感激。

最佳答案

配置更改后 Bundle 不是 null,因为您的 Fragment 实现不是唯一使用它的实现。以下引述来自 documentation对于 Activity 但它对 Fragment 也有效,如 Handling Runtime Changes 中所述:

However, even if you do nothing and do not implement onSaveInstanceState(), some of the activity state is restored by the Activity class's default implementation of onSaveInstanceState(). Specifically, the default implementation calls the corresponding onSaveInstanceState() method for every View in the layout, which allows each view to provide information about itself that should be saved.

因此,除了确保 Bundle 不是 null 之外,您还应该检查带有键“date”和“time”的 extras 是否存在。当您保存两个 key 或一个都不保存时,检查其中一个就足够了:

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
}

关于android - SavedInstanceState 不为空但为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com