5

私はViewPagerとNavigationModeとアクションバーを使用navigation_mode_tabs (右のタブ)コールONSTART()断片のViewpagerを表示する前には、

まず、Fragment0が表示され、メソッド「onCreateView」と私は「中央のタブ」(Fragment1)に行くために水平にスライドさせた場合は、「ONSTARTは」、Fragment0と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 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(); 
    } 
} 

答えて

4

その後、onCreateViewonStart通過するフラグメントのための完全に正常です。

「直前に出てくる」と言われたら正しく理解すれば、探しているライフサイクルの方法はonResumeの方法だと思います。これは、フラグメントがアクティブになる前に呼び出される最後のものです。

+1

オフセットは正常ですが、表示される前(または表示時)に「onStart」または「onCreateView」または「onResume」で強制的に呼び出しを行うことはできますか? アイテムを選択したときにFragment1内のListViewを使用しているため、Fragment2は表示されますが、彼の "onStart"/"onCreateView"/"onResume"は呼び出されませんでした...更新します – bzhWarrior

+0

これらはライフサイクルイベントです断片。起動イベントは毎回呼び出され、終了ライフサイクルイベントの一部は、メモリがOSによって回収されるため呼び出されないことがあります。 – TronicZomB

関連する問題