【问题标题】:Add and implement a spinner in fragment在片段中添加和实现微调器
【发布时间】:2020-05-28 23:59:11
【问题描述】:

我已经看到了实现活动微调器的指南和教程。但是,相同的方法不适用于片段。这是我在片段类的onCreateView 方法中的代码

val personnames = arrayOf("akshat" , "mourya")
    val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, personnames)
    spinner.adapter = arrayAdapter
    spinner.onItemSelectedListener = object :

    AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {

        }

        override fun onItemSelected(
            parent: AdapterView<*>?,
            view: View?,
            position: Int,
            id: Long
        ) {

            spinnerText.text = personnames[position]
        }

在第 2 行调用 ArrayAdapter 方法时,我收到类型不匹配错误,因为第一个参数需要上下文,而在我的代码中它是一个片段。 我尝试在活动中做同样的事情,它奏效了。 片段应该像迷你活动,那为什么会出现这个错误呢?

还有什么方法可以将微调器添加到我的片段中?

【问题讨论】:

  • 传递 requireContext() 而不是 this

标签: android android-fragments kotlin spinner


【解决方案1】:

使用 requireContext() 代替第 2 行中的 this

像这样:

val arrayAdapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, personnames)

【讨论】:

    【解决方案2】:

    试试这样:

     val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_spinner_item, personnames)
    

    【讨论】:

      【解决方案3】:

      Fragment 不是Context 的子类,因此您不能将this 作为ArrayAdapter 构造函数的第一个参数传递。 当您在 Fragment 中需要 Context 对象时,您需要使用 requireContext()requireActivity() 这两个函数之一。

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多