【问题标题】:Strange fragment lifecycle behavior: onCreate called twice奇怪的片段生命周期行为:onCreate 调用了两次
【发布时间】:2013-06-18 09:32:35
【问题描述】:

我已经创建了简单的片段。

片段类

public class MyFragment extends Fragment {
static int count = 0;
static TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("TEST", "oncreate");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.frag, container, false);
    tv = (TextView) view.findViewById(R.id.tv);
    return view;
}

public static TextView setMyText(String text) {
    tv.setText(text);
    return tv;
}
}

但问题是 onCreate 片段被调用了两次(首次启动活动时)。任何人都知道为什么?事实上,每个生命周期方法都会被调用两次(onAttach、onResume..)。如果有人想知道,我旋转屏幕或其他任何东西。这是常见的情况还是我在这里做错了什么?

活动课

 public class MainActivity extends FragmentActivity {

private static int COUNT = 0;
private static int COUNT2 = 5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view_pager);

    ViewPager vp = (ViewPager) findViewById(R.id.vp);
    vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
    vp.setOnPageChangeListener(new CustomPageListener());       
}


private static class MyAdapter extends FragmentStatePagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

    MyFragment mf = new MyFragment();
    return mf;      
    }

    @Override
    public int getCount() { 
        return 5;
    }

}

private class CustomPageListener extends ViewPager.SimpleOnPageChangeListener {



    @Override
    public void onPageSelected(int position) {

        MyFragment.setMyText("This is page "+position);

    }

}

}

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    默认情况下FragmentStatePagerAdapter 将为 ViewPager 实例化两个页面。 onCreate 它被调用了两次,对于public Fragment getItem(int position) 返回的每个片段一次

    【讨论】:

    • 嗯,这有点“烦人”,主要有两个原因,1:生命周期搞砸了。如果我只在页面之间滑动 3 次(如果适配器返回 5 个页面),则会调用 onCreate。所以在活动启动时两次,然后再三次。这意味着我的 viewpager 中的最后两个片段没有收到“onCreate”调用。 2:在 onCreate 中编写任何代码都很烦人,因为代码将运行两次。这里有什么工作或..?
    • 您可以尝试使用 pager.setOffscreenPageLimit(0)。不知道行不行
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2014-12-29
    • 2011-12-23
    • 2018-07-14
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多