Android动态生成Spinner异常:无法按玩家数量生成对应控件
Android跳转后动态生成Spinner不生效问题排查与修复
核心问题
你的代码中重复启动了两次Hole1Activity,第二次启动的Intent未携带玩家数量参数,导致Hole1Activity接收到的是默认值1,所以看起来动态生成Spinner的功能失效。
看NewGameActivity按钮点击事件的这段代码:
// Starts Hole1 and tells how many players are playing the game Intent passnumbers = new Intent(this, Hole1Activity.class); passnumbers.putExtra("NUMBER_OF_PLAYERS", Integer.parseInt(selectedNumberOfPlayers)); startActivity(passnumbers); //Sends user to first hole page Intent redirecttohole = new Intent(NewGameActivity.this, Hole1Activity.class); startActivity(redirecttohole);
第一次启动的Intent正确携带了参数,但紧接着又启动了一个不带参数的Hole1Activity实例,后者会覆盖前者的页面,最终你看到的是仅生成1个Spinner的默认状态。
修复代码
修改NewGameActivity的按钮点击逻辑,只保留一个携带参数的Intent启动即可:
buttonStartGame.setOnClickListener(v -> { // 获取选中的玩家数量 String selectedNumberOfPlayers = (String) spinnerNumberOfPlayers.getSelectedItem(); // 仅创建一个Intent并携带参数,启动Hole1Activity Intent intent = new Intent(NewGameActivity.this, Hole1Activity.class); intent.putExtra("NUMBER_OF_PLAYERS", Integer.parseInt(selectedNumberOfPlayers)); startActivity(intent); });
额外优化建议
- 添加日志验证参数:在Hole1Activity中添加日志,确认是否接收到正确的玩家数量:
int numberOfPlayers = getIntent().getIntExtra("NUMBER_OF_PLAYERS", 1); Log.d("Hole1Activity", "当前玩家数量: " + numberOfPlayers);
- 优化Spinner布局:给动态生成的Spinner添加间距,避免控件拥挤:
// 在创建Spinner后添加布局参数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ); params.setMargins(0, 8, 0, 8); // 上下各8dp间距 shotCount.setLayoutParams(params);
内容的提问来源于stack exchange,提问作者glouw
相关产品推荐
相关产品推荐

