在两个活动之间传递数据

25 浏览
0 Comments

在两个活动之间传递数据

这个问题已经有答案了:

在Android应用程序中如何在活动之间传递数据?

如何在Android上管理startActivityForResult

我正在尝试在两个不同的活动之间发送和接收数据。我在这个网站上看到了一些其他的问题,但是没有一个问题涉及保留第一类状态。

例如,如果我想要从类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日
0
0 Comments

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

0
0 Comments

在第一个活动中:

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

0