我已经看到了实现活动微调器的指南和教程。但是,相同的方法不适用于片段。这是我在片段类的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
方法时,我收到类型不匹配错误,因为第一个参数需要上下文,并且在我的代码中它是一个片段。我尝试在活动中执行相同的操作,但它确实起作用。片段应该像迷你活动一样,那么为什么这个错误会加剧?
还有什么方法可以将微调器添加到片段中?
您必须访问片段中的上下文。
使用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]
}
尝试这样:
val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_spinner_item, personnames)
Fragment
不是Context
的子类,因此您不能将this
用作ArrayAdapter
构造函数的第一个参数。如果需要在Context
中使用Fragment
对象,则需要使用requireContext()
或requireActivity()
这两个函数之一。