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]
    }
}
相关推荐
Zhu7585 小时前
在k8s集群部署MySQL单实例,支持多个主流发行版
android·mysql·kubernetes
AFinalStone8 小时前
Android 7系统异常问题排查(四)Framework层(上)—System Server Watchdog
android·系统异常
宝杰X79 小时前
Android Room3 多平台数据库
android·数据库
huibin14785236912 小时前
热缓解学习记录
android·学习
我命由我1234515 小时前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法
小田的博客15 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
一笑的小酒馆16 小时前
Android智能猫砂盆视频加载慢卡顿问题分析
android
只会cv的小前端18 小时前
七巧低代码服务端脚本使用方法
android·低代码·rxjava
18 小时前
Android 自定义 View 实战:从零打造工业级全向摇杆控件(OmniJoystickView)
android·kotlin·自定义view·摇杆控件
雨白18 小时前
深入理解 Kotlin 协程 (十一):以逸待劳,探秘 select 多路复用与并发安全策略
android·kotlin