onActivityCreated() 中的捆绑返回 null,即使在 onSaveInstanceState() 中设置值之后也是如此
Posted
技术标签:
【中文标题】onActivityCreated() 中的捆绑返回 null,即使在 onSaveInstanceState() 中设置值之后也是如此【英文标题】:Bundle in onActivityCreated() returns null, even after setting values in onSaveInstanceState() 【发布时间】:2013-10-27 15:58:38 【问题描述】:在应用程序中,每当 fragment 失去焦点(即在其上打开另一个活动/片段)时,就会调用 onSaveInstanceState()
。
developers guide 中也提到了这一点。
我正在尝试使用此方法在片段恢复时保持片段的状态。
我的意图是在片段恢复时在onActivityCreated()
中调用这个bundle
。
虽然onSaveInstanceState
在片段失去焦点之前被调用。
但是,当 onActivityCreated()
被调用时,它会将 Bundle savedInstanceState
接收为 null。
如何从捆绑包中获取数据。
代码:
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
MyListAdapter adapter = new MyListAdapter(getActivity(),
R.layout.my_row, titles, icons, this);
setListAdapter(adapter);
if (savedInstanceState != null)
// Never goes inside this condiiton.
// Restore last state for checked position.
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
@Override
public void onSaveInstanceState(Bundle outState)
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
【问题讨论】:
尝试一些 log.v 方法,然后发送 logcat。这将显示程序切换的位置 还有另一种使用方式SharedPreferences
是一直出错,还是第一次打开应用程序时出错?
不想共享首选项,捆绑中有很多数据要存储。 @Otra 它每次都给 null
【参考方案1】:
那么这意味着你的activity和fragment只是暂停了,不需要保存它们的实例状态(onSaveInstanceState()
不一定被调用)。
如果您想确保调用onSaveInstanceState()
,请在设备的开发者设置中选择“不保留活动”。然后每次暂停活动时,系统都会将其杀死,强制调用onSaveInstanceState()
(当然,除非你只是按下回)
【讨论】:
不,在调试时onSaveInstanceState()
被调用。更新了我的问题以上是关于onActivityCreated() 中的捆绑返回 null,即使在 onSaveInstanceState() 中设置值之后也是如此的主要内容,如果未能解决你的问题,请参考以下文章
Android 片段 onCreateView 与 onActivityCreated
onActivityCreated 已弃用,如何正确使用 LifecycleObserver?
为啥会调用fragment的onCreateView、onCreate、onActivityCreated