我已经学到,在我的片段中需要一个空构造函数才能避免重新初始化时出现崩溃。我的问题是,当我的片段被初始化时(至少有一些),我使用数据列表。那么有什么好的方法可以使用包含数据列表的方式启动新的片段呢? 我应该在 OnCreate()
中创建一个 getData
方法,从其他来源获取数据,还是有更合适的方法?
向 bundle 中传递数据并不是一个很好的方法,因为我有很多数据。
那么让我们来看一个例子(这样我会更好理解)。
当用户点击按钮时,片段就会启动。我过去常用的方式是这样创建新片段的:
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();
}
我无法将所有数据传递给bundle,所以那样行不通。那么我该怎么办?
A:我应该使用空构造函数初始化片段,然后从我的Activity中使用setter直接在片段中设置数据吗?但是,如果用户按下主页键,Android关闭片段,并且用户稍后返回,那么我会丢失数据吗?
B:我应该使用工厂模式初始化片段并调用setRetainInstance(true)
,为标识数据给片段赋予一个键,然后让片段从第三方来源在onCreateView中获取所需的数据吗?
C:我只需创建一个空构造函数,然后在onCreate()
中获取片段所需的数据吗?
需要注意的是,应用程序被锁定在竖屏模式下,因此问题主要涉及在Android关闭并重新启动时维护对象。