android - 恢复 fragment 的正确方法是什么?

标签 android android-fragments android-activity android-lifecycle

首先,如果这个解释看起来不清楚,我很抱歉,我是 Android 的新手。 我在主要 Activity 中有一个 ViewPager,显示用户动态添加的 fragment 。 fragment 最初是在 Activity 启动时创建的,并通过适配器添加到 ViewPager,即适配器只是返回正确的 fragment ,据我所知, fragment 的内容是在 ViewPager 第一次“检索” fragment 时创建的。

问题是当主 Activity 在方向更改后恢复时,所有 fragment 也会复活,并且当适配器尝试返回由用户新创建的 fragment 时,不再调用 fragment 方法 createView() 并且它因 NullPointerException 而失败。 ViewPager 似乎保留了最初附加到它的 fragment ,并且不会为同一位置的新添加的 fragment 调用 createView()。

我有一种感觉,我错过了 Fragment 生命周期中的关键点。我不想改变设计。我的主要问题是在 Activity 恢复后返回添加到 ViewPage 的 fragment 的正确方法是什么?有什么方法可以找到最近附加的 fragment 吗?

最佳答案

如果 fragment 已经存在,它将被重新使用。但是 fragment 的状态不会。你应该看看http://developer.android.com/training/basics/activity-lifecycle/recreating.html获取更多信息。

特别是您应该考虑覆盖 onSavedInstanceStateonRestoreInstanceState 作为重新填充生成该 nullpointerexception 的字段的方法

要确定 fragment 的实例是否已经创建,您可以像这样使用“findFragmentByTag”:

String fragmentTag = MyFramgment.getClass().getName();
MyFragment frag = getFragmentManager().findFragmentByTag(fragmentTag);

if(frag == null)
   frag = new MyFragment();

无论最终在“frag”中引用了什么,都将其显示给用户。

关于android - 恢复 fragment 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664599/

相关文章:

android - 应用程序崩溃 "back"映射 fragment

android - 如何终止我的应用程序的所有 Activity ?

android - 向 EditText 添加范围检查

android - onClickListener 中的 AlertDialog

java - 将额外内容放入 bundle 中会导致奇怪的冲突和应用程序崩溃......为什么?

java - 使用谷歌地图获取 Activity 和 fragment 之间的数据

java - android:使用xml页面创建一个新的 Activity

android - findViewById(android.R.id.content).getRootView() nullPointerException 异常

android - Firebase 数据的更改不会更新

android - 使用 GCM 注册 ID 作为唯一 ID 对数据库进行 CRUD 操作?