【发布时间】:2015-09-11 07:34:48
【问题描述】:
所以,我有一个片段 - 片段 A - 包含一个对象 - 对象 O - 用于设置 TextViews 和其他元素。为了实例化片段,我使用了一个静态方法 A.getInstance(O)。对象 O 是可序列化的,因此我可以使用 instance.setArguments 等通过 Bundle 将其发送到片段 A 的新实例。
我在 A 的 onCreate 方法中检索 O,并在 onViewCreated 中使用 O 设置字段。直到这里一切正常。在我用另一个片段(片段 B)替换 A 并从 B 导航回 A 后,参数 Bundle 不再包含对象 O,我得到 NullPointerException。 Bundle本身不为null,但不包含O。
我用这个方法替换片段:
public void replaceCurrentFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = context.getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment).addToBackStack(null).commit();
}
片段A也使用上述方法显示。
我做错了什么?
【问题讨论】:
-
您是否仅从
Fragment#getArgumnets()恢复对象 O?您是否尝试从 Fragment 实例状态保存和恢复对象 O? -
我在 onCreate 期间将对象 O 保存在片段 A 的实例中。问题是我第二次进入 onCreate 时没有得到 O。
-
我的意思是,你是否重写了 Fragment#onSaveInstanceState 来保存你的对象,然后在 Bundle 中查找它,传入 onCreate(Bundle savedInstanceState)?
-
不,我没有那样做。有必要吗?我目前正在使用 Fragment#getArguments() 检索捆绑包。它不应该每次都返回相同的Bundle吗?
标签: android android-fragments fragment-backstack