Android 调用之前片段的onStart()以显示Viewpager、导航\u模式\u选项卡
我使用了一个ViewPager和一个带有NavigationMode的ActionBar:“NAVIGATION\u MODE\u TABS” 我放了3个片段:Fragment0(左选项卡)、Fragment1(中选项卡)、Fragment2(右选项卡) 首先,出现Fragment0,并为Fragment0和Fragment1调用方法“onCreateView”和“onStart” 如果我水平滑动到“中间选项卡”(Fragment1),Fragment2的方法“onCreateView”和“onStart”(右选项卡)将被调用 我想知道这是否正常 因为我想在Fragment2出现之前调用它的“onStart”,怎么做 我的代码:Android 调用之前片段的onStart()以显示Viewpager、导航\u模式\u选项卡,android,android-fragments,android-actionbar,android-viewpager,Android,Android Fragments,Android Actionbar,Android Viewpager,我使用了一个ViewPager和一个带有NavigationMode的ActionBar:“NAVIGATION\u MODE\u TABS” 我放了3个片段:Fragment0(左选项卡)、Fragment1(中选项卡)、Fragment2(右选项卡) 首先,出现Fragment0,并为Fragment0和Fragment1调用方法“onCreateView”和“onStart” 如果我水平滑动到“中间选项卡”(Fragment1),Fragment2的方法“onCreateView”和“on
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 y a 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
方法。这是在片段激活之前最后一次调用。因此偏移量是正常的,但如何在“onStart”或“onCreateView”或“onResume”出现之前(或出现时)强制调用?因为我在Fragment1中选择一个项目时使用了ListView,所以Fragment2会显示出来,但他的“onStart”/“onCreateView”/“onResume”不会被调用。。。我想更新片段的生命周期事件。每次都会调用启动事件,由于操作系统正在回收内存,一些生命周期结束事件可能不会被调用。