如何在主类菜单的Dialog中通过intent.putExtra传递int到另一个Activity
解决Dialog中通过Intent传递int数据到另一个Activity的问题
你的问题核心是把Intent传递逻辑放错了位置,而且误用了getIntent()方法——这个方法是用来获取当前Activity的启动Intent,不是用来创建新Intent跳转的。咱们一步步来修正:
第一步:调整菜单点击的逻辑
先把你onOptionsItemSelected里的Intent代码删掉,因为跳转逻辑应该放在Dialog的用户确认操作之后,而不是菜单刚点击的时候:
public boolean onOptionsItemSelected(MenuItem item){ int id = item.getItemId(); if(id == R.id.numero_ejercicios_settings){ // 只负责弹出Dialog,跳转逻辑移到Dialog内部 dialogSpinner(); return true; } return super.onOptionsItemSelected(item); }
第二步:在Dialog的确认按钮里处理Intent传递
你需要在dialogSpinner()方法中,给Dialog的确认按钮添加点击监听器,在用户确认后再创建Intent、传递数据并启动目标Activity。假设你用的是AlertDialog.Builder创建Dialog,示例代码如下:
private void dialogSpinner() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("设置练习数量"); // 这里放你的Spinner初始化逻辑(比如加载选项、设置选中监听等) // ... 你的自定义Spinner代码 ... // 添加确认按钮,点击时执行跳转和数据传递 builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 1. 创建新的Intent,指定当前页面和目标页面 Intent intent = new Intent(当前你的主Activity.class, 目标Activity.class); // 2. 传递int类型数据,numero_total是你要传的变量 intent.putExtra(Constantes.NUMERO_TOTAL, numero_total); // 3. 启动目标Activity startActivity(intent); } }); // 可选:添加取消按钮 builder.setNegativeButton("取消", null); // 显示Dialog builder.show(); }
关键注意点
- 如果你是自定义Dialog布局(比如自己写了带Spinner的xml),要在确认点击时从Spinner中获取选中的值:
// 在确认按钮的onClick里获取值 Spinner spinner = dialog.findViewById(R.id.your_spinner_id); // 假设Spinner的选项是int类型,根据实际情况转换 int numero_total = Integer.parseInt(spinner.getSelectedItem().toString()); - 目标Activity中接收数据的代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 获取传递的int数据,第二个参数是默认值(没传数据时用这个) int numeroTotal = getIntent().getIntExtra(Constantes.NUMERO_TOTAL, 0); // 接下来就可以用这个数值做你需要的操作了 }
这样调整后,用户在Dialog中完成操作点击确认,才会触发数据传递和页面跳转,逻辑就通顺了~
内容的提问来源于stack exchange,提问作者David Lamas Jimenez
相关产品推荐
相关产品推荐

