簡體   English   中英

切換到選項卡式布局中的另一個選項卡時,片段onStart()和onStop()不被調用

[英]Fragment onStart() and onStop() not called when switching to another tab in tabbed layout

public class HomeActivity extends AppCompatActivity {
    Context context = HomeActivity.this;
    private SectionsPagerAdapter mSectionsPagerAdapter;
    private ViewPager mViewPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_home);
       Toolbar toolbar = findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       mSectionsPagerAdapter = new 
       SectionsPagerAdapter(getSupportFragmentManager());
       mViewPager =  findViewById(R.id.container);
       mViewPager.setAdapter(mSectionsPagerAdapter);
       TabLayout tabLayout = findViewById(R.id.tabs);
       mViewPager.addOnPageChangeListener(new 
            TabLayout.TabLayoutOnPageChangeListener(tabLayout));
       tabLayout.addOnTabSelectedListener(new 
            TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
    }

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0 : return new HomeFrag1();
            case 1 : return new HomeFrag2();
            case 2 : return new HomeFrag3();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }
}
}

當我從片段1切換到片段2時,片段1的onStop方法未調用,但是當我從片段2切換到片段3時被調用。當我從片段2切換到片段1時,也不會調用onStart。

ViewPager上有一個名為offscreenPageLimit的屬性-默認設置為1,這意味着ViewPager將在當前頁面的任一側保留1個頁面-這就是為什么不調用上述生命周期回調的原因。 如果您確實只想在內存中保留一個片段,則可以將setOffscreenPageLimit為0,這樣您將獲得所需的行為。

根據這篇文章

當頁面不再可見或與可見頁面相鄰時, ViewPager要求適配器銷毀它。

以上似乎可以解釋您的問題。 從1-> 2切換不會嘗試破壞Page 1,因為它與可見的Page 2相鄰。 但是切換2-> 3將破壞第1頁,因為它不再與現在可見的第3頁相鄰。
同樣,切換2-> 1不會重新創建Page 1,因為它以前沒有被破壞過。

我建議您嘗試覆蓋onPause()onResume() ,看看它是否如您所願。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM