【问题标题】:onCreateView is called before fragment createdonCreateView 在片段创建之前被调用
【发布时间】: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 时都会重新创建我的片段?不认为这是个好主意

标签: android fragment


【解决方案1】:

问题在于 android 会尝试恢复活动状态及其所有片段。

super.onCreate(null);

在活动类中解决了所有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多