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;
}
}
}
当我从 fragment 1 切换到 fragment 2 时,不会调用 fragment 1 的 onStop 方法,但当我从 fragment 2 切换到 fragment 3 时会调用它。当我从 fragment 2 切换到 fragment 1 时,不会调用 onStart要么。
最佳答案
ViewPager
上有一个名为 offscreenPageLimit
的属性 - 默认设置为 1,这意味着 ViewPager
将从任一侧保留 1 个页面当前页面的 - 这就是为什么没有调用上述生命周期回调的原因。如果你真的只想在内存中保留一个 fragment ,你可以将 setOffscreenPageLimit
设置为 0,这样你就会得到你正在寻找的行为。
关于android - 切换到选项卡式布局中的另一个选项卡时,不会调用 fragment onStart() 和 onStop(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123221/