[英]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.