4
我創建了簡單的片段。奇怪的片段生命週期行爲:onCreate調用兩次
片段CLASS
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);
}
}
}
嗯,這有點「煩人」,主要有兩個原因,1:生命週期很糟糕。如果我只在頁面之間滑動三次(如果有5頁適配器返回)onCreate被調用。活動啓動後再進行兩次,然後再進行三次。這意味着我的viewpager中的最後兩個片段不會收到「onCreate」調用。 2:由於代碼將運行兩次,所以在onCreate中編寫任何代碼都很麻煩。這裏有沒有任何工作或..? – rootpanthera
你可以嘗試使用pager.setOffscreenPageLimit(0)。我不知道它是否會起作用 – Blackbelt