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

Android开发:如何根据首个Spinner选择联动更新第二个Spinner?

解决Spinner联动更新问题(无需JSON/数据库)

嘿,我看出来问题出在哪了——你的代码只在Activity启动的时候判断了一次gedungSpn的选中状态,但没有监听它的选择变化事件!所以当你切换第一个Spinner的选项时,第二个Spinner根本不会收到更新通知。

下面是修复后的完整代码,我还给你做了点优化,避免重复冗余的操作:

Spinner gedungSpn, lantaiSpn, ruangSpn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_kelas); 

    // 提前初始化第二个Spinner,避免重复执行findViewById
    lantaiSpn = (Spinner) findViewById(R.id.lantai_spn);
    // 初始化第一个Spinner的选项
    GedungSpinner(); 

    // 核心:给第一个Spinner设置选择监听,实时触发第二个Spinner的更新
    gedungSpn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            // 根据选中的位置切换第二个Spinner的数据源
            if (position == 0){
                LantaiSpinnerRektorat(); 
            }else if(position == 1){
                LantaiSpinnerGL(); 
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // 可选:没有选中项时的处理逻辑,这里留空即可
        }
    });

    // 初始化页面时,默认加载第一个选项对应的楼层数据
    LantaiSpinnerRektorat();
} 

public void GedungSpinner(){ 
    gedungSpn = (Spinner) findViewById(R.id.gedung_spn); 
    List<String> list = new ArrayList<String>(); 
    list.add("Rektorat"); 
    list.add("Griya Legita"); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    gedungSpn.setAdapter(dataAdapter); 
} 

public void LantaiSpinnerRektorat(){ 
    List<String> list = new ArrayList<String>(); 
    list.add("Lantai 1"); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    lantaiSpn.setAdapter(dataAdapter); 
} 

public void LantaiSpinnerGL(){ 
    List<String> list = new ArrayList<String>(); 
    list.add("Lantai 1"); 
    list.add("Lantai 2"); 
    list.add("Lantai 3"); 
    list.add("Lantai 4"); 
    list.add("Lantai 5"); 
    list.add("Lantai 6"); 
    list.add("Lantai 7"); 
    list.add("Lantai 8"); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    lantaiSpn.setAdapter(dataAdapter); 
} 

关键改动说明:

  • 添加OnItemSelectedListener:这是实现Spinner联动的核心,用户切换第一个Spinner选项时会自动触发onItemSelected方法,我们在这里完成第二个Spinner的内容更新
  • 提前初始化lantaiSpn:把它的控件查找逻辑移到onCreate中,避免每次调用楼层方法都重复执行findViewById
  • 初始化默认数据:确保页面启动时,第二个Spinner能显示第一个选项对应的楼层内容

如果想进一步简化代码,还可以把楼层数据提前存在一个Map集合里(比如Map<Integer, List<String>> floorDataMap),这样不用写两个单独的方法,直接根据选中位置从Map中取数据创建适配器即可,不过当前的写法已经完全能满足你的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:26