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要么。
答案 0 :(得分:3)
ViewPager
上有一个名为offscreenPageLimit
的属性-默认设置为1,这意味着ViewPager
将从当前页面的任一侧保留1页-这就是前面提到的原因未调用生命周期回调。如果您真的只想在内存中保留一个片段,可以将setOffscreenPageLimit
设置为0,这样您就可以得到想要的行为。
答案 1 :(得分:1)
根据this article:
当页面不再可见或与可见页面相邻时,ViewPager要求适配器销毁它。
以上似乎可以解释您的问题。从1-> 2切换不会尝试破坏Page 1,因为它与可见的Page 2相邻。但是,切换2-> 3将破坏第1页,因为它不再与现在可见的第3页相邻。
同样,切换2-> 1不会重新创建Page 1,因为它以前没有被破坏过。
我建议您尝试覆盖onPause()
和onResume()
,看看它们是否如您所愿。