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]
    }
}
相关推荐
weiggle1 小时前
第五篇:Modifier 解析——链式调用的艺术
android
awu的Android笔记1 小时前
Android 弱网模拟:别只会用均匀分布——三种延迟模型和两种丢包模型的原理与实现
android·tcp/ip
sensor_WU2 小时前
【Delphi】 开发 android 升级模块硬核实现
android·delphi android·android 升级·apk升级 delphi
帅次2 小时前
Kotlin MVVM 实战入门:从分层到状态闭环
android·kotlin·android studio·android jetpack
YF02113 小时前
Android BLE 信号强度获取与 底层原理深度解析
android·蓝牙
随遇丿而安3 小时前
第7周:RecyclerView 高级功能与列表硬核优化
android
qq3621967053 小时前
手机App下载安装完全指南:2026最新教程(Android & iOS)
android·ios·智能手机
想取一个与众不同的名字好难3 小时前
安卓设置亮度的时候,系统会在100%与0%反复横跳
android·java·开发语言
帅次3 小时前
Android 高级工程师面试参考答案:Kotlin MVVM 高频题、追问与项目表达
android·面试·职场和发展·kotlin