Kotlin Jetpack Navigation Fragment中Spinner异常,报ArrayAdapter调用错误
解决Fragment中Spinner的ArrayAdapter初始化错误
嘿,我一眼就揪出你代码里的问题啦!你遇到的“ArrayAdapter function cannot be called”错误,核心原因是ArrayAdapter的构造函数第一个参数需要传入Context类型对象,但你传了Fragment的this——Fragment本身并不是Context,所以编译器找不到匹配的构造方法,自然就报错了。
修复方案
把构造参数里的this换成Fragment能获取到的合法Context就行,有两种靠谱的选择:
- 用
requireContext():这是Fragment自带的方法,会返回当前Fragment绑定的Context,在onViewCreated阶段调用完全安全,它还会在Fragment未绑定Context时抛出异常,帮你提前发现潜在问题。 - 用
view.context:直接从onViewCreated的view参数里获取Context,也是非常稳妥的方式。
修正后的完整代码
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) val list: MutableList<String> = ArrayList() for (i in 1..1000) { list.add("Item $i") } // 替换this为合法的Context对象 val adapter: ArrayAdapter<String> = ArrayAdapter(requireContext(), R.layout.support_simple_spinner_dropdown_item, list) spinnerCompany.adapter = adapter }
改完之后,编译器就能匹配到正确的ArrayAdapter构造方法,你的Spinner应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者Sebastien Desemberg
相关产品推荐
相关产品推荐

