Android Spinner选中项获取及跨Activity参数传递问题咨询
问题原因及修复方案
1. Spinner选中后无文本显示的核心原因
- continent变量作用域问题:你在
DestinationSpinner()方法内定义的String continent是局部变量,仅在该方法内生效,AvailableAirlines()的选中监听中访问的是全局未赋值的continent变量,判断条件无法触发,所以不会执行setText逻辑 - 方法调用顺序问题:如果在
onCreate中没有先调用DestinationSpinner()初始化Spinner、再调用AvailableAirlines()设置监听,也会导致逻辑不生效 - 额外确认:
availableAirlines、spinnerDestination两个控件必须提前执行findViewById完成初始化
2. 修正后的代码示例
第二个Activity全局变量声明
// 类顶部全局变量声明 private Spinner spinnerDestination; private TextView availableAirlines; private String continent; // 全局存储传递过来的大洲参数 private String keyIdentifier; // 存储你要传递的keyidentifier
第二个Activity onCreate逻辑
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.你的布局文件id); // 第一步:初始化控件,必须优先执行 spinnerDestination = findViewById(R.id.你的Spinner控件id); availableAirlines = findViewById(R.id.你的TextView控件id); // 第二步:初始化Spinner DestinationSpinner(); // 第三步:设置选中监听 AvailableAirlines(); }
修正后的DestinationSpinner方法
private void DestinationSpinner() { Bundle bundle=getIntent().getExtras(); if(bundle!=null) { // 给全局变量赋值,不要加String修饰,否则会生成新的局部变量 continent = bundle.getString("continent"); // 接收keyidentifier,注意key的拼写和第一个Activity传参时完全一致 keyIdentifier = bundle.getString("keyidentifier"); switch (continent) { case "asia": ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(MainActivity2.this, R.array.asia, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerDestination.setAdapter(adapter); break; // 其他大洲的逻辑在这里加对应case即可 } } }
修正后的选中监听逻辑
public void AvailableAirlines() { spinnerDestination.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String selected=spinnerDestination.getItemAtPosition(position).toString(); // 常量放前面可以避免空指针异常 if ("asia".equals(continent) && "Japan".equals(selected)) { availableAirlines.setText("Available airports"); } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); }
3. keyidentifier传递方法
第一个Activity跳转时添加参数即可,注意key的拼写和第二个Activity取值时完全一致:
btnAsia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(),MainActivity2.class); intent.putExtra("continent", "asia"); // 替换成你实际要传递的keyidentifier值 intent.putExtra("keyidentifier", "你要传递的具体内容"); startActivity(intent); } });
内容的提问来源于stack exchange,提问作者legna
相关产品推荐
相关产品推荐

