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

Android Fragment中点击按钮获取Spinner 2当前选中值问题求助

问题分析与解决方案

嘿,我一眼就看出问题所在了——你获取Spinner2选中值的时机完全错了!

你现在是在onCreateView方法里直接初始化了from_unit1变量:

final String from_unit1 = spinner2.getSelectedItem().toString();

这行代码只会在Fragment创建视图的那一刻执行一次,拿到的是Spinner2的初始默认值,之后不管你怎么切换Spinner2的选项,这个变量都不会自动更新。所以点击按钮的时候,Toast自然只会显示最初的那个值。

解决办法

把获取Spinner2选中值的代码移到按钮的点击事件里面,这样每次点击按钮时,都会实时获取当前Spinner2选中的内容。

另外,我还注意到你代码里有几个小问题:

  • 重复调用了adapter1.setDropDownViewResource()多次,其实只需要调用一次就够了
  • 变量命名可以更清晰(比如adapter1、adapter2可以改成对应功能的名字,比如lengthAdapter、weightAdapter,方便后续维护)

修改后的完整代码

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

public class Convertor extends Fragment {
    public Convertor() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View view = inflater.inflate(R.layout.convertor_1, container, false);

        String[] values_conversion = {"Convert1", "Convert2"};
        final Spinner spinner1 = view.findViewById(R.id.spinner1);
        final Spinner spinner2 = view.findViewById(R.id.spinner2);
        final Spinner spinner3 = view.findViewById(R.id.spinner3);

        // 初始化各个适配器,修正重复设置dropDown的问题
        final ArrayAdapter adapter1 = ArrayAdapter.createFromResource(getActivity(), R.array.array1_array, android.R.layout.simple_spinner_item);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        final ArrayAdapter adapter2 = ArrayAdapter.createFromResource(getActivity(), R.array.array2_array, android.R.layout.simple_spinner_item);
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        final ArrayAdapter adapter3 = ArrayAdapter.createFromResource(getActivity(), R.array.array3_array, android.R.layout.simple_spinner_item);
        adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        final ArrayAdapter adapter4 = ArrayAdapter.createFromResource(getActivity(), R.array.array4_array, android.R.layout.simple_spinner_item);
        adapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner2.setAdapter(adapter1);
        spinner3.setAdapter(adapter3);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this.getActivity(), android.R.layout.simple_spinner_item, values_conversion);
        adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        spinner1.setAdapter(adapter);
        spinner1.setSelection(0);

        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> arg0, final View view, int position, long id) {
                switch (position) {
                    case 0:
                        spinner2.setAdapter(adapter1);
                        spinner3.setAdapter(adapter3);
                        break;
                    case 1:
                        spinner2.setAdapter(adapter2);
                        spinner3.setAdapter(adapter4);
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        final Button convert_btn = view.findViewById(R.id.convert_btn);
        convert_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 在这里实时获取Spinner2的当前选中值
                String currentSelectedValue = spinner2.getSelectedItem().toString();
                Toast toast = Toast.makeText(getContext(), currentSelectedValue, Toast.LENGTH_SHORT);
                toast.show();
            }
        });

        return view;
    }
}

额外提示

如果之后需要把选中的字符串转换成对应数值,你可以:

  • 在适配器里绑定数值和字符串(比如使用ArrayAdapter<CustomObject>,自定义对象包含字符串和数值)
  • 或者根据选中的字符串,在点击事件里通过switch或HashMap映射到对应的数值

内容的提问来源于stack exchange,提问作者SimonF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:17