Fragment中使用ArrayAdapter实现AutoCompleteTextView报错的解决方法
解决Fragment中ArrayAdapter参数不匹配的问题
问题出在ArrayAdapter的第一个参数上——你传的this是Fragment实例,而ArrayAdapter要求的是Context类型的参数。Fragment本身不是Context,所以会触发参数不匹配的错误。
修正方法很简单,把this替换成requireContext()(该方法能确保返回当前Fragment已关联的有效Context):
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val frequencyArray = ArrayList<String>() frequencyArray.add("Daily") frequencyArray.add("Weekly") frequencyArray.add("Monthly") val adapter = ArrayAdapter( requireContext(), // 替换原有的this com.google.android.material.R.layout.support_simple_spinner_dropdown_item, frequencyArray ) val autoComplete = view.findViewById<AutoCompleteTextView>(R.id.notAuto) autoComplete?.setAdapter(adapter) }
额外说明:
requireContext()在Fragment已依附Activity的阶段(比如onViewCreated)会稳定返回Context,若Fragment未关联Activity则会抛出异常,适合当前场景使用。- 若想做可空兼容,也可以用
context,但需增加非空判断,比如context?.let { ctx -> val adapter = ArrayAdapter(ctx, ...) },不过onViewCreated阶段context必然非空,用requireContext()更简洁。
内容的提问来源于stack exchange,提问作者Victor kiptoo
相关产品推荐
相关产品推荐

