在片段中添加并实现微调器

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

我已经看到了实现活动微调器的指南和教程。但是,相同的方法不适用于片段。这是我在片段类的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方法时,我收到类型不匹配错误,因为第一个参数需要上下文,并且在我的代码中它是一个片段。我尝试在活动中执行相同的操作,但它确实起作用。片段应该像迷你活动一样,那么为什么这个错误会加剧?

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

android android-fragments kotlin spinner
3个回答
0
投票

您必须访问片段中的上下文。

使用context访问上下文。

更新后的代码是

val personnames = arrayOf("akshat" , "mourya")
    val arrayAdapter = ArrayAdapter(context, 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]
        }

0
投票

尝试这样:

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

0
投票

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

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