如何在不使用 finish() 函数的情况下通过意图发送数据?



我正在制作一个有 2 个活动的安卓应用程序。在此应用中,作业编号 1 将启动作业编号 2,并从作业编号 2 请求数据。我使用意图在它们之间传输数据。据我所知,活动 2 仅在调用 finish(( 函数后发送数据。但是在我的应用程序中,我想使活动 2 始终处于活动状态。那么,有没有办法使用带有等待完成((函数的意图来发送数据?

更新:这是我的源代码:

  • 在活动编号 1 中:

按下按钮时打开活动编号

public static final int REQUEST_CODE_INPUT=10;
public static final int RESULT_CODE_1=20;
public static final int RESULT_CODE_2=21;
private String TAG = "FirstActivity";

btnInputData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//Open Activity number 2 With REQUEST_CODE_INPUT
Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
//Call startActivityForResul
startActivityForResult(intent, REQUEST_CODE_INPUT);
}
});

处理接收的数据

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//Show Log
Log.d(TAG,"onActivityResult: requestCode = "+ requestCode+ "; resultCode = "+ resultCode);
//check if requestCode =REQUEST_CODE_INPUT
//
if(requestCode==REQUEST_CODE_INPUT)
{
//Check ResultCode from Activity 2
switch(resultCode)
{
case RESULT_CODE_1:
//value from Activity number 2
int v1= data.getIntExtra("data", 0);
arrData.add(v1*v1);
break;
case RESULT_CODE_2:
//value from Activity number 2
int v2= data.getIntExtra("data", 0);
arrData.add(v2);
break;
}
}
}

*在活动编号2中

调用函数在按下按钮时发送数据

btnSave1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//
sendToFirstActivity(FirstActivity.RESULT_CODE_1);
}
});
btnSave2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//
sendToFirstActivity(FirstActivity.RESULT_CODE_2);
}
});

将数据返回到活动编号 1 的函数

public void sendToFirstActivity(int resultcode)
{
Intent intent=getIntent();
int value= Integer.parseInt(editNumber.getText()+"");
intent.putExtra("data", value);
setResult(resultcode, intent);
finish();
}

在此代码中,按下按钮后,活动编号 2 将关闭并将数据发送到活动编号 1。当我尝试删除 finish(( 函数时,活动 2 不会关闭,但不会将数据发送到活动编号 1。

查看onActivityResult()函数的 API,只有在调用 finish(( 函数时才会触发。 我不认为startActivityForResult()是适合您的正确方法。

相关内容

最新更新