android - 切换到选项卡式布局中的另一个选项卡时,不会调用 fragment onStart() 和 onStop()

标签 android android-fragments

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/

相关文章:

android - 我可以将 OnCreateView 与 Activity 一起使用还是仅与 fragment 一起使用?

java - Thread.run() 和 Handler.post() 和 Android 中的 Service 有什么区别?

java - fragment 标签的使用

java - 在 list 中包含特定 java 文件时发生 fragment 错误

java - android studio 项目到 javaFX?

android - SherlockFragmentActivity中ViewPager单个tab的Fragment事务

android - 来自 FragmentActivity 的 Fragment 中的 RestartLoader

android - android 中的值和值-正常文件夹

android - 如何随机获取 R.raw 字符串

android - Android 中大数据安全存放在哪里