Android 开发,FragmentPagerAdapter 的 isViewFromObject 方法问题

kotlin 复制代码
class MyFragmentPagerAdapter(
    fm: FragmentManager,
    private val fragments: List<Fragment>,
    private val titles: List<String>
) : FragmentPagerAdapter(fm) {
    override fun getCount(): Int {
        return fragments.size
    }

    override fun isViewFromObject(view: View, `object`: Any): Boolean {
        return view === `object`
    }

    override fun getItem(position: Int): Fragment {
        return fragments[position]
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return titles[position]
    }
}
  • 在 Android 开发中,上述代码中,重写 isViewFromObject 方法后,ViewPager 不显示内容了
问题原因
  1. FragmentPagerAdapter 中的 isViewFromObject 方法实现如下,
java 复制代码
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return ((Fragment)object).getView() == view;
}
  1. 这里返回的 object 实际上是一个 Fragment,而不是 View。而 isViewFromObject 方法的作用是判断 View 是否与 object 相关联

  2. getItem 方法返回的 Fragment 对象,就会作为 isViewFromObject 方法中的 object 参数传入

  3. View 和 Fragment 是两个完全不同的对象,=== 永远返回 false,导致 ViewPager 认为当前显示的 View 与 Fragment 没有关联,从而不显示内容

处理策略
  • 不重写 isViewFromObject 方法即可
kotlin 复制代码
class MyFragmentPagerAdapter(
    fm: FragmentManager,
    private val fragments: List<Fragment>,
    private val titles: List<String>
) : FragmentPagerAdapter(fm) {
    override fun getCount(): Int {
        return fragments.size
    }

    override fun getItem(position: Int): Fragment {
        return fragments[position]
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return titles[position]
    }
}
相关推荐
惟恋惜3 小时前
第 3 章 · 列表、滚动与 Lazy 深入:告别 RecyclerView 思维
ui·android jetpack
古法安卓4 小时前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
Htr_7 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
wardenlzr8 小时前
车机看门狗(Watchdog)为何会让整机硬重启
android·优化·车机
IT毕设实战小研8 小时前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计
aqi009 小时前
一文读懂 HarmonyOS 7.0 带来的十大API重要升级
android·华为·harmonyos·鸿蒙·harmony
是店小二呀10 小时前
鸿蒙PC开源移植:CodeLite原生IDE与Remote Agent适配
android·智能手机·远程桌面
不要喷香水10 小时前
00-总览与架构
kotlin·app·档案管理
终端安全笔记10 小时前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios