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]
    }
}
相关推荐
用户69371750013843 小时前
2026,程序员的时代拐点到了
android·前端·后端
浪潮IT馆4 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio
xiaozongt19896 小时前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty7 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909069 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网9 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU10 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen10 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
ZHOUPUYU10 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU11 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php