Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用之前片段的onStart()以显示Viewpager、导航\u模式\u选项卡_Android_Android Fragments_Android Actionbar_Android Viewpager - Fatal编程技术网

Android 调用之前片段的onStart()以显示Viewpager、导航\u模式\u选项卡

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

我使用了一个ViewPager和一个带有NavigationMode的ActionBar:“NAVIGATION\u MODE\u 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 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”不会被调用。。。我想更新片段的生命周期事件。每次都会调用启动事件,由于操作系统正在回收内存,一些生命周期结束事件可能不会被调用。