如何在Android Fragment中实现Spinner并解决相关代码报错问题
修正后的实现代码
第一步:修复Fragment的onCreateView逻辑
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 先实例化布局,不能提前return View rootView = inflater.inflate(R.layout.fragment_fragment2, container, false); Spinner spinner = rootView.findViewById(R.id.spinner1); // 第一个参数传入Fragment依附的Context,不要传入Fragment本身 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(requireContext(),R.array.documento, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); // 最后返回布局实例 return rootView; }
第二步:修复onItemSelected参数匹配问题
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long l) { // 用getItemAtPosition获取选中的条目内容 String text = parent.getItemAtPosition(position).toString(); Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { }
错误原因说明
- 原代码中
onCreateView先执行了return语句,后续Spinner初始化逻辑完全不会执行,且Fragment没有自带findViewById方法,需要通过inflate出来的布局实例调用该方法查找控件 ArrayAdapter.createFromResource要求第一个参数为Context类型,Fragment本身不是Context子类,需要调用requireContext()获取其依附的Activity上下文- 原
onItemSelected方法的参数名和代码中使用的parent、position不匹配,导致编译器找不到对应变量;同时调用getItemPosition是方法误用,获取选中条目内容需要用getItemAtPosition
内容的提问来源于stack exchange,提问作者Lucas da Costa Silva
相关产品推荐
相关产品推荐

