【问题标题】:NullPointerException At Creating view with fragment inside fragment KotlinNullPointerException 在使用片段内的片段创建视图 Kotlin
【发布时间】:2020-11-30 18:06:40
【问题描述】:

当我启动包含带有 TabLayout 的 NavigationDrawer 的活动时,会出现一个错误报告,指出 viewPager 不能为空。 这是发生错误的代码,在 viewPager.adapter = adapter ...的行中...

希望有人能告诉我如何解决这个问题。

我在想我需要一种方法来创建这些片段

class fragment_nav_home : Fragment() {

    private fun setUpTabs() {
        val adapter = ViewPagerAdapter(childFragmentManager)

        adapter.addFragment(fragment_tab_artists(), "Artists")
        adapter.addFragment(fragment_tab_agencies(), "Agencies")

        viewPager.adapter = adapter

        tabs.setupWithViewPager(viewPager)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setUpTabs()
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        // setUpTabs()
        return inflater.inflate(R.layout.fragment_nav_home, container, false)
    }
}

函数 addFragment 来自下一个 Kotlin 类

class ViewPagerAdapter(supportFragmentManager: FragmentManager) :
    FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    private val lstFragments = ArrayList<Fragment>();
    private val lstFragmentsTitles = ArrayList<String>();

    override fun getCount(): Int {
        return lstFragments.size
    }

    override fun getItem(i: Int): Fragment {
        return lstFragments[i]
    }

    override fun getPageTitle(i: Int): CharSequence? {
        return lstFragmentsTitles[i]
    }

    fun addFragment(fragment: Fragment, title: String) {

        lstFragments.add(fragment)
        lstFragmentsTitles.add(title)
    }
}

【问题讨论】:

    标签: android kotlin fragment adapter


    【解决方案1】:

    您的viewPager 变量为空,因此您不能在其上设置adapter 属性,因为null 没有。

    你在哪里设置viewPager?看起来您没有使用视图绑定库,因此您需要执行 viewPager = findViewById(R.id.viewPager) 或其他任何操作,例如在onCreateView:

    val view = inflater.inflate(R.layout.fragment_nav_home, container, false)
    viewPager = view.findViewById(R.id.viewPager)
    return view
    

    或者如果您使用 Kotlin 合成(布局中的 ID 被转换为具有相同名称的变量,因此您可以直接访问视图而无需查找它们):

    import kotlinx.android.synthetic.main.fragment_nav_home.*
    

    在这种情况下,您需要在 XML 布局中使用 ID 为“viewPager”的ViewPager

    现在它是空的,因为你没有分配它,或者它不存在(如果它被自动分配)

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2019-03-07
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多