在两个活动之间传输数据

时间:2017-10-13 13:52:56

标签: java android

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

例如,如果我想从A类向类B发送一个整数X,然后对整数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);

这似乎不正确,因为我只想切换回活动A并在操作完成后从活动B接收数据(可能活动B中的按钮开始对接收的数据进行操作,然后将其发送回活动A 1)

2 个答案:

答案 0 :(得分:3)

在第一项活动中:

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

答案 1 :(得分:2)

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

当然,您需要在onActivityResult()上实施ActivityA来获取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);
        }
    }
}