课程名称:Android开发项目实战-领券联盟
在首页的顶部的类别栏时使用的ViewPager2,但是产生以下的错误,然后首页类别栏是空的。
打log发现是在第一次创建adapter之后(在BaseFragment里的onCreateView执行完之后),网络传输回类别之前。哪怕把后续的传输数据注释了也是会报这个错误
我也尝试了在adapter最开始也进行初始化,但是还是显示这个错误,类别栏也是空的,在adapter里打log输出类别也是正确的。
在homePager绑定adapter前后也打log看了绑定后是存在值的,说明是正确绑定了。
在绑定后也能通过getPageTitle输出类别,但是就是无法显示。
实在是不知道怎么回事了?

BaseFragment的onCreateView如下:
override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    homeBinding_ = FragmentHomeBinding.inflate(layoutInflater) // 类的成员变量
    homePager_ = homeBinding_.homePager // 类的成员变量
    tabLayout_ = homeBinding_.homeTabLayout
    rootview_ = getRootView(inflater, container, savedInstanceState)
    initPresenter()
    loadData()
    initView()
    return rootview_
}
HomeFragment的initView如下
override fun initView() {
        homePagerAdapter_ = HomePagerAdapter(this)
        homePager_!!.adapter = homePagerAdapter_
        if (tabLayout_ != null) {
            TabLayoutMediator(tabLayout_!!, homePager_!!) { tab, position ->
                tab.text = homePagerAdapter_!!.getPageTitle(position)
            }.attach()
        }
    }
HomePageAdapter如下
class HomePagerAdapter(fragment: Fragment) :
    FragmentStateAdapter(fragment) {
    private val categoryList_: MutableList<Data> = mutableListOf()
    init {
        categoryList_.add(Data(0, "精选"))
    }
    public fun getPageTitle(position: Int): CharSequence {
        return categoryList_[position].title
    }
    override fun getItemCount(): Int {
        return categoryList_.size
    }
    override fun createFragment(position: Int): Fragment {
        val homePagerFragment = HomePagerFragment()
        return homePagerFragment
    }
    fun setCategories(categories: Categories) {
        categoryList_.clear()
        val data = categories.data
        categoryList_.addAll(data)
        notifyDataSetChanged()
    }
}
解决了,是因为返回的是在BaseFrament里return的是rootView,但是我又用了viewBinding,虽然不知道为什么这两个指向的不是同一个东西,但是把BaseFragment里的返回设置成rootBinding.inflate(layoutinflater)就解决了。
提示:没有设置适配器
我看到你已经设置了:
homePagerAdapter_ = HomePagerAdapter(this) homePager_!!.adapter = homePagerAdapter_那怎么还报这个错?要考虑一下时序之类的。
还需要你提供完整的日志。
这是在打断点看赋值的时候和报错后的homePager.Adapter的情况。
第一张图赋值的时候是和homePagerAdapter一样的,
第二张图报错后(在收到网络信息前)看Adapter的值也是有的。
图一和图二是两次运行的截图,所以@后面的哈希码不太一样。
这是我目前打的一个日志,不知道是否完整,如果需要补充我也可以输出,谢谢!