Android 配置更改后未在viewpager中调用Fragment.onCreateView()
更改方向后,将重新创建我的活动和viewpager(列表/详细信息类型),如果我在列表中选择了一个项目,该活动将崩溃 我不想为所有细节打扰您(存在nullpointerexception,因为onCreateView()中引用的textview为null)。 我的问题是:ViewPager如何在不调用onCreateView()的情况下显示两个页面,每个页面中都有一个片段 在启动应用程序之后,如何在启动设备之前工作良好 我只有2页/片段。但我看到调试器在重新创建此活动时创建了4个片段。你知道为什么和在哪里有记录吗 有解决办法吗?提前感谢你的帮助。我在这里迷路了,因为我自己不能控制碎片,viewpager可以 ========== 更新:请查看以下附加信息Android 配置更改后未在viewpager中调用Fragment.onCreateView(),android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,更改方向后,将重新创建我的活动和viewpager(列表/详细信息类型),如果我在列表中选择了一个项目,该活动将崩溃 我不想为所有细节打扰您(存在nullpointerexception,因为onCreateView()中引用的textview为null)。 我的问题是:ViewPager如何在不调用onCreateView()的情况下显示两个页面,每个页面中都有一个片段 在启动应用程序之后,如何在启动设备之前工作良好 我只有2页/片段。但我看到调试器在重新创建此活动时创建了4个片段。你知道为什
public class DetailFragment extends Fragment {
TextView mDetailTV;
// Retrieve the data to display from the parent activity
private String getData() {
ViewPagerActivity activity = (ViewPagerActivity)getActivity();
return( activity.detailArray[activity.mPosition] );
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_detail_fragment, container, false);
mDetailTV = (TextView)view.findViewById(R.id.detailTV);
displayDetail(getData());
return view;
}
// Display data
void displayDetail(String data) {
mDetailTV.setText(data);
}
列表和详细信息片段被实例化并传递给寻呼机适配器,如下所示:
mListFragment = new ListFragmentt();
mDetailFragment = new DetailFragment();
mPagerAdapter = new MFragmentPagerAdapter(getSupportFragmentManager(), mListFragment, mDetailFragment);
此外,列表/详细信息中的数据来自经典的Skakespeare示例,因此我怀疑我的三星S4内存不足。我通过删除FragmentActivity超类的onSaveInstanceState调用修复了我的问题,如下所示: 受保护的空碎片活动(束超出状态){ }
但我仍然不明白在碎片活动的超类中发生了什么。这只是一个直觉上的猜测成功了。我不明白背后的理论。如果有人能解释一下,那就太好了。默认情况下,
ViewPager
会缓存两个相邻的片段。因此,不需要显式调用onCreateView
。您可以将活动发布到oncreate code吗?您可以缓存视图,以防页面太多(或者您认为视图不会占用太多内存),然后返回onCreateView的缓存视图。此外,为了避免OOM,您可以使用WeakReference对缓存视图进行引用,以防您担心内存问题。我尝试使用mViewPager.setOffscreenPageLimit(2)缓存页面,但仍然存在nullPointerException。您的意思是我们可以缓存重新创建的活动吗?