在两个活动之间传递数据
在两个活动之间传递数据
这个问题已经有答案了:
我正在尝试在两个不同的活动之间发送和接收数据。我在这个网站上看到了一些其他的问题,但是没有一个问题涉及保留第一类状态。
例如,如果我想要从类A将整数X发送到类B,然后对整数X执行一些操作,然后将其发送回类A,那么应该如何做呢?
这是否像下面的代码一样简单?
在A类中
Intent i = new Intent(this, ActivityB.class); i.putExtra("Value1", 1); startActivity(i);
并从B类接收响应:
Bundle extras = getIntent().getExtras(); int value1 = extras.getint("Value1",0);
在B类中
Bundle extras = getIntent().getExtras(); int value1 = extras.getint("Value1",0); //Do some operations on value1 such as maybe adding or subtracting Intent i = new Intent(this, ActivityA.class); i.putExtra("Value1", 1); startActivity(i);
这不正确,因为我只想切换回Activity A并在操作完成后从Activity B接收数据(也许在Activity B中的按钮开始操作接收到的数据,然后将其发送回Activity A?)
admin 更改状态以发布 2023年5月20日
startActivityForResult()
和 onActivityResult()
是解决您问题的方法。
在您的 ActivityA
中,使用 startActivityForResult()
-
Intent i = new Intent(this, ActivityB.class); i.putExtra("Value1", 1); startActivityForResult(i, requestCodeForOperation);
然后在您的 ActivityB
中,获取从 ActivityA
发送的数据。例如 -
int value1 = getIntent().getExtras().getInt("Value1", 0);
完成您的操作并使用 setResult()
添加您的操作结果和 finish()
。示例 -
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish();
当然,您需要在 ActivityA
上实现 onActivityResult()
来获取从 ActivityB
返回的数据。例如 -
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == requestCodeForOperation) { if(resultCode == Activity.RESULT_OK){ String result=data.getIntExtra("result", 0); } } }
在第一个活动中:
Intent i = new Intent(this, ActivityB.class); i.putExtra("Value1", "1"); startActivityForResult(i, 100);
接收到的数据如下:
Intent receivedIntent = getIntent(); if(receiveIntent!=null){ String value1 = receiveIntent.getStringExtra("Value1"); }
在第二个活动中经过一些操作后:
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish();
在FirstActivity
中处理结果:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 100) { if(resultCode == Activity.RESULT_OK){ String result=data.getStringExtra("result"); } } }