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]
    }
}
相关推荐
虎王物联14 小时前
PHP实现MQTT消息处理:物联网设备数据接收与指令下发
android·物联网·php
我命由我1234514 小时前
Android 开发 - 获取当前设备屏幕的旋转角度
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
程序员-Benothing16 小时前
MySQL 索引下推是什么?——深入理解 ICP 原理与实践
android·数据库·mysql
怀化纱厂球迷16 小时前
百度地图--android接入百度地图导航
android
雨白17 小时前
Kotlin 泛型基础:“万能魔法盒”的诞生
kotlin
AFinalStone17 小时前
Android 7系统无障碍服务(四)AccessibilityEvent 的产生与投递
android·无障碍服务
智购科技无人售货机工厂17 小时前
2026自动售货机热敏打印模块集成:从串口驱动到小票自动裁切的工程实践~YH
android·stm32·单片机·嵌入式硬件·系统架构
A133455518 小时前
苹果安卓手机播放器推荐:2026无广告4K怎么选
android·智能手机
hunterandroid19 小时前
ContentProvider 跨进程数据共享实战
android·前端