【发布时间】:2017-04-29 17:23:29
【问题描述】:
我的应用程序使用PagerView 组件来显示一些数据。每个选项卡都是一个片段。在应用程序中,Facebook 授权发生在单独的活动中。
问题是当用户内存不足时,android 会杀死应用程序的活动并且当他在授权后返回时,android 尝试重新启动活动并且这里发生了一些奇怪的事情。为了模拟这种情况,我将后台进程的最大数量设置为 0。这是我从头开始应用程序时的日志:
选项卡:已创建适配器
片段:onCreateView 视图:android.widget.FrameLayout{195756ef V.E.............I. 0,0-0,0},fragment:CategoryFragment{128705fc #0 id=0x7f1000f0 android:switcher:2131755248:0}
片段:onstart android.widget.FrameLayout{195756ef V.E..... ......I. 0,0-0,0},view:android.widget.FrameLayout{195756ef V.E..... ......I. 0,0-0,0},fragment:CategoryFragment{128705fc #0 id=0x7f1000f0 android:switcher:2131755248:0}
到目前为止一切都很好(在标签适配器中创建片段,然后调用 onCreateView)。这里是我登录 facebook 并返回应用程序后发生的情况:
片段:onDestroyView
片段:onDestroy
片段:onCreateView 视图:android.widget.FrameLayout{f50f881 V.E..... ......I. 0,0-0,0},fragment:CategoryFragment{25f74d26 #0 id=0x7f1000f0 android:switcher:2131755248:0}
片段:onstart android.widget.FrameLayout{f50f881 V.E..... ......I. 0,0-0,0},view:android.widget.FrameLayout{f50f881 V.E...........I. 0,0-0,0},fragment:CategoryFragment{25f74d26 #0 id=0x7f1000f0 android:switcher:2131755248:0}
选项卡:已创建适配器
片段的视图怎么会在片段之前创建?
标签适配器类:
private class TabsAdapter extends FragmentPagerAdapter {
private CategoryFragment fragment1;
private PackFragment fragment2;
private HistoryFragment fragment3;
public TabsAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
Log.d("fragment","tabs adapter created");
fragment1=new CategoryFragment();
fragment2=new PackFragment();
fragment3=new HistoryFragment();
}
@Override
public Fragment getItem(int position) {
//Log.d("get item",position+"");
switch (position) {
case 0:
return fragment1;
case 1:
return fragment2;
case 2:
return fragment3;
default:
return null;
}
}
@Override
public int getCount() {
return 3;
}
}
这里是如何实例化的:
//after some initialization stuff
tabs=(PuzzlePagerView) findViewById(R.id.tabs);
tabs.setCurrentItem(0,false);
tabs.setOffscreenPageLimit(2);
FragmentManager fm=this.getSupportFragmentManager();
tabs.setAdapter(new TabsAdapter(fm));
【问题讨论】:
-
你给了我们一些日志。那太棒了。但是,您还可以提供一些您提到的代码吗?前任。显示您的适配器代码以及您将适配器设置为 viewpager 的位置和方式
-
对不起,添加了适配器的代码。代码是规范的。
-
我怀疑你的碎片没有被破坏
-
在调用
getItem之前创建每个片段是否有原因?只需拨打getItem即可。前任。return new CategoryFragment();或return new PackFragment(); -
每次调用 getItem 时都会重新创建我的片段?不认为这是个好主意