【问题标题】:Bundle in onActivityCreated() returns null, even after setting values in onSaveInstanceState()onActivityCreated() 中的捆绑返回 null,即使在 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

标签: android android-fragments


【解决方案1】:

那么这意味着你的activity和fragment只是暂停了,不需要保存它们的实例状态(onSaveInstanceState()不一定被调用)。

如果您想确保调用onSaveInstanceState(),请在设备的开发者设置中选择“不保留活动”。然后每次暂停活动时,系统都会将其杀死,强制调用onSaveInstanceState()(当然,除非你只是按下回)

【讨论】:

  • 不,在调试时 onSaveInstanceState() 被调用。更新了我的问题
猜你喜欢
  • 2021-08-03
  • 2011-06-14
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多