如何在已调用Intent的类中再次调用Intent并传递至其他类?
解决Intent数据传递到另一个类的问题
核心问题分析
你之前的报错大概率是两个原因:一是从Intent获取的foodImg等变量是局部变量,在按钮点击的匿名内部类里访问不到;二是创建新Intent时没正确指定上下文(比如误用了匿名类的this)。下面是修正后的完整代码和步骤:
第一步:把Intent数据存为类成员变量
先把从Intent拿到的数据提升为当前Activity的成员变量,这样按钮点击事件里能直接调用:
public class YourActivity extends AppCompatActivity { // 定义类成员变量存储Intent数据 private int foodImg; private String foodTitle; private String foodPrice; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity_layout); // 从Intent获取数据并赋值给成员变量 foodImg = getIntent().getIntExtra("Image", 0); foodTitle = getIntent().getStringExtra("Title"); foodPrice = getIntent().getStringExtra("Price"); // 原有UI赋值逻辑 mainImg.setImageResource(foodImg); name1.setText(foodTitle); name2.setText(foodPrice); // 按钮点击事件 addit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 原有计数逻辑 name3.setVisibility(View.VISIBLE); String cv = name3.getText().toString(); int val = Integer.parseInt(cv); val++; name3.setText(String.valueOf(val)); if(val>=5){ addit.setVisibility(View.INVISIBLE); } else if(val>=0){ minuss.setVisibility(View.VISIBLE); } // 新增:传递数据到另一个类(以启动另一个Activity为例) Intent sendIntent = new Intent(YourActivity.this, TargetActivity.class); // 把需要传递的数据放入Intent sendIntent.putExtra("Image", foodImg); sendIntent.putExtra("Title", foodTitle); sendIntent.putExtra("Price", foodPrice); // 可选:把当前的计数val也传过去 sendIntent.putExtra("CurrentCount", val); // 启动目标类 startActivity(sendIntent); } }); } }
第二步:在目标类中接收数据
假设你要传递到TargetActivity,在它的onCreate方法里接收数据:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.target_activity_layout); // 接收Intent传来的数据 int receivedImg = getIntent().getIntExtra("Image", 0); String receivedTitle = getIntent().getStringExtra("Title"); String receivedPrice = getIntent().getStringExtra("Price"); int receivedCount = getIntent().getIntExtra("CurrentCount", 0); // 后续可以用这些数据更新UI或做其他逻辑 }
注意事项
- 确保目标Activity已经在
AndroidManifest.xml里注册,否则启动会报错 - 如果传递的不是Activity而是普通类,可以直接把成员变量作为参数传入类的方法,比如
new TargetClass(foodImg, foodTitle),不用Intent
内容的提问来源于stack exchange,提问作者ash
相关产品推荐
相关产品推荐

