You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:15:02