在 kotlin 中带有微调器的 ArrayAdapter - 不能使用提供的参数调用以下任何函数

AME*_*IDA 8 android kotlin

我有一个微调器,我想在其中显示字符串列表(例如语言);我尝试了很多方法,但都没有奏效。现在我被这个唯一的错误困住了。它是关于 ArrayAdapted,“以下任何函数都不能使用提供的参数调用”。我尝试了这篇文章中提到的技巧链接到一个类似的问题

val arrayAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())
Run Code Online (Sandbox Code Playgroud)

和这个:

val arrayAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, statuts.toList())
Run Code Online (Sandbox Code Playgroud)

和这个:

val arrayAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, statuts)
Run Code Online (Sandbox Code Playgroud)

但它不起作用。请帮助我,我是 Kotlin 的新手。

    class FirstFragment : Fragment(),AdapterView.OnItemSelectedListener {

    // attributes
    var statuts = arrayOf("English", "French", "Spanish")
    var spinner:Spinner? = null
    var textView_msg:TextView? = null

    // methods    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        textView_msg = msg
        spinner = this.statuts_sp
        spinner!!.setOnItemSelectedListener(this)
        val arrayAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())
        // Set layout to use when the list of choices appear
        arrayAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        // Set Adapter to Spinner
        statuts_sp!!.adapter = aa
        // Inflate the layout for this fragment
        return inflater!!.inflate(R.layout.fragment_first, container, false)
    }
    /*************************************************************************************/
    override fun onItemSelected(arg0: AdapterView<*>, arg1: View, position: Int, id: Long) {
    textView_msg!!.text = "Selected : "+statuts[position]
         }
    /*************************************************************************************/
    override fun onNothingSelected(arg0: AdapterView<*>) {}
}
Run Code Online (Sandbox Code Playgroud)

Hem*_*mar 8

在片段中使用数组适配器时,第一个参数必须是来自活动的当前类上下文。

替换这一行

val aa = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())
Run Code Online (Sandbox Code Playgroud)

到 :

var list = ArrayList<String>()
val aa = ArrayAdapter(activity,android.R.layout.simple_spinner_item,list)
Run Code Online (Sandbox Code Playgroud)


Nhấ*_*ang 5

问题: ArrayAdapter (Context context, int resource, List objects)接收 aContext作为第一个参数,但您传递thisas Fragment(不是 的子类Context)作为第一个参数。

解决方案:更改您的代码

val aa = ArrayAdapter(this,android.R.layout.simple_spinner_item, statuts.toList())
Run Code Online (Sandbox Code Playgroud)

val aa = ArrayAdapter<String>(requireActivity(), R.layout.simple_spinner_item, statuts.toList())
Run Code Online (Sandbox Code Playgroud)