API 27 弃用了 FragmentStatePagerAdapter

新手上路,请多包涵

FragmentStatePagerAdapter 已从 API 27 中弃用。 FragmentStatePagerAdapter 的替代方案是什么?

 private class MainPagerAdapter extends FragmentStatePagerAdapter {

    MainPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment result = new DummyFragment();
        return result;
    }

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

}

上面的代码显示 FragmentStatePagerAdaptergetItem(...)super(...) 已弃用。

原文由 MJM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

切换到 ViewPager2 并改用 FragmentStateAdapter

从那里您可以使用 onPause 和 onResume 回调来确定哪个片段当前对用户可见。当片段变得可见时调用 onResume,当它停止可见时调用 onPause。 -> 阅读更多

基于 EricReejesh 的评论。


旧答案(现在也已弃用)

以下构造函数执行相同的操作

super(@NonNull FragmentManager fm)
super(@NonNull FragmentManager fm, BEHAVIOR_SET_USER_VISIBLE_HINT)

通过 BEHAVIOR_SET_USER_VISIBLE_HINT 已弃用。您应该改为传递 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

传递这些的区别在 FragmentPagerAdapter 中解释:

  /**
 * Indicates that Fragment#setUserVisibleHint(boolean) will be
 * called when the current fragment changes.
 */
@Deprecated
public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0;

/**
 * Indicates that only the current fragment will be
 * in the Lifecycle.State#RESUMED state. All other Fragments
 * are capped at Lifecycle.State#STARTED.
 */
public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1;

原文由 eytschkay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏