【问题标题】:Use not nullable fragment manager使用不可为空的片段管理器
【发布时间】:2020-01-03 19:51:00
【问题描述】:

我想在我的片段中显示我的TabLayout,但他想要可以为空的supportFragmentManager

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val fragmentAdapter = MyPagerAdapter(activity?.supportFragmentManager)
        viewpager_main.adapter = fragmentAdapter

        tabs_main.setupWithViewPager(viewpager_main)
    }

这是我的适配器:

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.mandarine.targetList.features.targets.list.TargetsFragment

class MyPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {

    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> {
                TargetsFragment()
            }
            1 -> SecondFragment()
            else -> {
                return FirstFragment()
            }
        }
    }

    override fun getCount(): Int {
        return 3
    }

    override fun getPageTitle(position: Int): CharSequence {
        return when (position) {
            0 -> "First Tab"
            1 -> "Second Tab"
            else -> {
                return "Third Tab"
            }
        }
    }
}

如何重写我的 val?

val fragmentAdapter = activity?.supportFragmentManager?.let { MyPagerAdapter(it) }

java.lang.IllegalStateException: viewpager_main 不能为空

FragmentPagerAdapter 也被弃用了,mb 需要使用 smth new 吗?

【问题讨论】:

  • 你需要在onViewCreated而不是onCreate的片段中访问你的视图
  • @MohammedAlaa 但如果我在 onViewCreated 中写 val fragmentAdapter = activity?.supportFragmentManager 我会得到可为空的 fragmentAdapter
  • 是的,但这是正常检查this

标签: android kotlin android-adapter android-tablayout androidx


【解决方案1】:

getActivity() 可以在您的片段处于准备过程中并且即将准备好时为空。通常这发生在 OnCreate 中,而在 OnViewCreated 中,视图已经生成并且活动在此处永远不会为空

在 onViewCreated 中分配 viewpager 适配器

全局定义以在类中的任何位置使用它

    private lateinit var viewpager_main: ViewPager
    private lateinit var myPagerAdapter :MyPagerAdapter


override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
 viewpager_main= view.findViewById(R.id.viewpager_main)
myPagerAdapter = MyPagerAdapter(activity!!.supportFragmentManager)
}

试试这个

检查以了解!和 ?在科特林 The difference between !! and ? in Kotlin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多