użyłem ViewPager oraz ActionBar z NavigationMode: "NAVIGATION_MODE_TABS"połączeń onStart() fragmentu przed wyświetlać Viewpager, navigation_mode_tabs
włożyłem 3 Fragmenty: Fragment0 (lewa zakładka), Fragment1 (zakładka środku), Fragment2 (zakładka po prawej) wydaje
pierwsze, Fragment0 i metody „onCreateView” i „onStart” nazywane są dla Fragment0 a Fragment1
Gdybym przesuwać poziomo, aby przejść do zakładki „środkowego” (Fragment1) metody "onCreateView" i "onStart" w Fragment2 (prawa zakładka) są nazywane ...
Więc, chcę wiedzieć, czy to normalne?
Ponieważ chcę wywołać "onStart" fragmentu 2 tuż przed pojawieniem się, jak to zrobić?
Mój kod:
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));
}
}
jeden fragment:
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;
}
}
Moja 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();
}
}
Tak więc przesunięcie jest normalne, ale jak mogę wymusić wywołanie "onStart" lub "onCreateView" lub "onResume" tuż przed pojawieniem się (lub w momencie pojawienia się)? ponieważ używam ListView w Fragment1, gdy wybrałem element, Fragment2 jest wyświetlany, ale jego "onStart"/"onCreateView"/"onResume" nie jest nazywane ... Chciałbym zaktualizować – bzhWarrior
Są to zdarzenia cyklu życia dla fragment. Zdarzenia startowe są wywoływane za każdym razem, niektóre z zakończonych zdarzeń cyklu życia mogą nie zostać wywołane z powodu odzyskania pamięci przez system operacyjny. – TronicZomB