之前调用Fragment的onStart()来显示Viewpager,navigation_mode_tabs

我使用ViewPager和带有NavigationMode的ActionBar:“NAVIGATION_MODE_TABS”

我放了3个片段:Fragment0(左标签),Fragment1(中间标签),Fragment2(右标签)

首先,出现Fragment0,并为Fragment0和Fragment1调用方法“onCreateView”和“onStart”

如果我水平滑动以转到“中间选项卡”(Fragment1),则会调用Fragment2(右选项卡)的方法“onCreateView”和“onStart”…

所以,我想知道这是否正常?

因为我想在它出现之前调用Fragment2的“onStart”,它是怎么做到的?

我的代码:

public class ActivityPrincipale extends FragmentActivity { private Intent intentService1; private Fragment fragment; [..] private ActionBar.TabListener tabListener; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.viewpager); // Création de la liste de Fragments que fera défiler le PagerAdapter listFragments = new Vector(); // Ajout des Fragments dans la liste des fragments listFragments.add(Fragment.instantiate(this, Fragment0.class.getName())); listFragments.add(Fragment.instantiate(this, Fragment1.class.getName())); listFragments.add(Fragment.instantiate(this, Fragment2.class.getName())); // Création de l'adapter qui s'occupera de l'affichage de la liste de Fragments this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), listFragments); pagerView = (ViewPager) super.findViewById(R.id.viewpager); // affectation de l'adapter au ViewPager pagerView.setAdapter(this.mPagerAdapter); pagerView.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // Quand il ya un swapp entre les page // on selectionne le tab correspondant Log.w("SWAPPING FRAGMENT!!", "swapping de fragment avec comme positin de destination = " + position); getActionBar().setSelectedNavigationItem(position); // DEBUGMODE } }); actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Create a tab listener that is called when the user changes tabs. tabListener = new ActionBar.TabListener() { public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { pagerView.setCurrentItem(tab.getPosition()); } public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { } public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { } }; actionBar.addTab(actionBar.newTab().setText("Frag0").setTabListener(tabListener)); actionBar.addTab(actionBar.newTab().setText("Frag1"").setTabListener(tabListener)); actionBar.addTab(actionBar.newTab().setText("Frag2").setTabListener(tabListener)); } } 

一个片段:

 public class Fragment0 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_0, container, false); Log.w("oFragmento", "fragment0"); return rootView; } } 

我的PagerAdapter:

 public class MyPagerAdapter extends FragmentPagerAdapter { private final List fragments; public MyPagerAdapter(FragmentManager fm, List list_fragments) { super(fm); this.fragments = list_fragments; } @Override public Fragment getItem(int position) { return (Fragment) fragments.get(position); } @Override public int getCount() { return this.fragments.size(); } } 

片段通过onCreateView然后onStart完全正常。 您可能想看一下片段生命周期。

如果我说“就在它出现之前”我正确理解你,那么我认为你正在寻找的生命周期方法是onResume方法。 这是在片段处于活动状态之前调用的最后一个。