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

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);
});

额外优化建议

  1. 添加日志验证参数:在Hole1Activity中添加日志,确认是否接收到正确的玩家数量:
int numberOfPlayers = getIntent().getIntExtra("NUMBER_OF_PLAYERS", 1);
Log.d("Hole1Activity", "当前玩家数量: " + numberOfPlayers);
  1. 优化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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:07:45