如何在第二个Activity同时显示首个Activity选中的Spinner项名及对应关联字符串
实现步骤
1. 修改第二个Activity(DetailActivity)的布局文件
你当前布局里第二个TextView的ID是battleship且固定写死了战舰的字符串,先把它改成通用的描述控件,删除默认文本:
<TextView android:id="@+id/site_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="16dp" android:layout_marginTop="40dp"/>
2. 修改DetailActivity的Java逻辑
在onCreate方法中新增匹配选中项和对应字符串资源的逻辑,代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); Intent intent = getIntent(); String messageText = intent.getStringExtra(EXTRA_MESSAGE); // 原有逻辑:设置顶部标题 TextView messageView = findViewById(R.id.sites); messageView.setText(messageText); // 新增逻辑:匹配对应描述资源 TextView descView = findViewById(R.id.site_desc); int descResId; switch (messageText) { case "Battleship North Carolina": descResId = R.string.battleship; break; case "Wilmington Railroad Museum": descResId = R.string.railroad; break; case "Bellamy Mansion Museum": descResId = R.string.house; break; default: descResId = R.string.app_name; // 可自行替换为默认提示字符串 } descView.setText(getResources().getString(descResId)); }
优化建议(可选)
你也可以直接传递Spinner选中的下标而非字符串,后续如果修改站点名称不需要调整匹配逻辑,更易维护:
- 修改MainActivity的
onItemSelected方法,新增传递下标参数:
intent.putExtra(DetailActivity.EXTRA_MESSAGE, text); // 新增一行传递选中下标 intent.putExtra("selected_position", position); startActivity(intent);
- DetailActivity中直接通过下标匹配资源:
// 拿到传递的下标,默认值0对应"请选择"项 int selectedPosition = intent.getIntExtra("selected_position", 0); // 下标和资源的映射数组,下标0留空对应"请选择"项 int[] descResArr = new int[]{0, R.string.battleship, R.string.railroad, R.string.house}; if (selectedPosition > 0 && selectedPosition < descResArr.length) { descView.setText(getResources().getString(descResArr[selectedPosition])); }
内容的提问来源于stack exchange,提问作者Jim Gallagher
相关产品推荐
相关产品推荐

