添加ViewPager2库在片段的OnAttach()中给出错误

问题描述 投票:0回答:1

我正在使用viewpager2的稳定版本,即1.0.0,但是当我在Gradle文件中添加此库时,它给我带来错误'onAttach'不会覆盖任何内容类型不匹配:推断类型为上下文?但是需要上下文]在构建时。

这是我的onAttach()代码。

override fun onAttach(context: Context?) {
        super.onAttach(context)

        _viewModel.listLiveData.observe(this, Observer { pair ->

            var success = false
            var msg = ""

            pair?.let {

                success = it.second.success
                msg = it.second.message

                if (success) {

                    it.first?.sections?.let { data ->
                        return@Observer createUI(data)
                    }
                }
            }

            loadComplete(success, msg)
        })
    }

通过删除该库,一切正常。我知道这是说要从context:Context?中删除,也许这可以解决我的问题,但是为什么该库与onAtach()方法发生冲突。而且不可能从每个片段中的context:Context?中除去,因为这是一个很大的项目,而要删除它,我还必须测试与它相关的每个案例,这很耗时。

android android-jetpack android-viewpager2
1个回答
0
投票

Kotlin的类型系统旨在消除代码(也称为The Billion Dollar Mistake)中空引用的危险。因此,Context不能为public void onAttach (Context context)为空,因为public void onAttach (Context context)已添加到生命周期中。每当您期望Fragment时,都可以使用Context?,但是没有相反的方法可以使用它,因为这在Kotlin中对于确保无效安全性很重要。

通过删除此库,一切正常!

我相信它与库无关,您可以尝试在没有Gradle特定依赖的情况下清理和构建项目,您可能会遇到类似的错误。另外,请确保使用最新的Kotlin编译器。只需将Android Studio更新到最新版本即可。将Context参数更改为非null不会破坏任何内容,请继续使用Android Studio onAttach功能。编码愉快!

© www.soinside.com 2019 - 2024. All rights reserved.