tôi đã sử dụng một ViewPager và một ActionBar với NavigationMode: "NAVIGATION_MODE_TABS"Gọi onStart() của Fragment trước để hiển thị ViewPager, navigation_mode_tabs
tôi đặt 3 Những mảnh vỡ: Fragment0 (tab bên trái), Fragment1 (tab giữa), Fragment2 (tab bên phải)
Thứ nhất, Fragment0 xuất hiện và các phương pháp "onCreateView" và "onStart" đang kêu gọi Fragment0 vÀ Fragment1
Nếu tôi trượt ngang để đi đến "tab giữa" (Fragment1), các phương thức "onCreateView" và "onStart" của Fragment2 (tab bên phải) được gọi là ...
Vì vậy, tôi muốn biết điều này có bình thường không?
Vì tôi muốn gọi "onStart" của Fragment2 ngay trước khi nó xuất hiện, Làm thế nào?
Mã của tôi:
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));
}
}
Một 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;
}
}
PagerAdapter của tôi:
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();
}
}
Vì vậy, bù đắp là bình thường, nhưng làm cách nào tôi có thể buộc cuộc gọi tại "onStart" hoặc "onCreateView" hoặc "onResume" juste trước khi nó xuất hiện (hoặc tại thời điểm xuất hiện)? vì tôi sử dụng ListView trong Fragment1 khi tôi chọn một mục, Fragment2 được hiển thị nhưng "onStart"/"onCreateView"/"onResume" của nó không được gọi ... Tôi muốn cập nhật – bzhWarrior
Đó là các sự kiện vòng đời cho miếng. Các sự kiện khởi động được gọi là mọi lúc, một số sự kiện kết thúc vòng đời có thể không được gọi do bộ nhớ được hệ điều hành thu hồi. – TronicZomB