所以我了解到我需要一个空的构造函数,以使我的片段不会在重新初始化时崩溃。我的问题是我在初始化片段时使用数据列表(至少其中一些)。那么用数据列表开始新片段的好方法是什么。我应该OnCreate()
采用getData
一种从其他来源获取数据的方法还是正确的方法?
由于我有很多数据,因此向捆绑包提供数据确实不是一个很好的方法。
所以让我们举个例子(我这样理解更好)。
当用户单击按钮时,片段将启动。我以前做的是以这种方式创建一个新片段:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.center_container, new DetailFragment(item));
fragmentTransaction.addToBackStack(DETAIL_TAG);
fragmentTransaction.commit();
然后在我的片段中:
public DetailFragment(EventItem item) {
mItem = item;
mPlaces = Database.getContainerPlaces(getActivity()).getValidItems();
}
我不能将所有数据都提供给一个包,所以这行不通。所以我该怎么做?
答:我应该使用空构造函数初始化片段,然后从我的活动中使用 setter 直接在片段中设置数据吗?但是,如果用户按下主页,Android 关闭片段并且用户稍后返回,我不会丢失数据吗?
B:我应该用工厂模式初始化片段并调用setRetainInstance(true)
,给片段一个识别数据的键,然后让片段从第三个来源获取 onCreateView 中所需的数据吗?
C:我应该只创建一个空的构造函数,然后onCreate()
获取片段所需的数据吗?
应该注意的是,该应用程序是纵向锁定的,因此问题主要在于在 Android 关闭和用户重新启动时维护对象。