英文:
Data return from Multiple Activities to Main Activity
问题
大家好。我已经开始编写(1个月大)Android应用程序,对于这方面的知识我还很陌生。
我有一个名为X的活动。在该活动X上,我有四个不同的按钮,分别调用了四个不同的活动。在这些三个活动中,我有一个按钮,并且在按下按钮后,我会将数据返回给活动X。此外,在活动X上,我可能不会调用这三个活动中的所有三个。我可能只调用1、3,或者只调用2、3。我已经搜索了很多,但是我找不到我寻求的内容。
编辑:当我在活动1、2、3中使用finish();
时,我可以调用其中一个活动(假设调用了活动1),并且能够获取数据并将其返回到活动X,但是当我尝试调用另一个活动(假设调用了活动2)时,我可以进入该活动,但是无法从它返回,因为它不知道要返回到哪里。
以下是我寻求的解决方案:
活动X -> 第一个活动 -> 返回数据1到X
活动X -> 第二个活动 -> 返回数据2到X
活动X -> 第三个活动 -> 返回数据3到X
活动X -> 发送数据1 + 数据2 + 数据3到第四个活动
我在活动X
中通过onClick
方法启动了我的三个活动(data_global
在Activity X
类中是全局变量)
switch (view.getId()) {
case R.id.btn1:
Intent i = new Intent(this, Activity1.class);
startActivityForResult(i, 200);
break;
case R.id.btn2:
i = new Intent(this, Activity2.class);
startActivityForResult(i, 201);
break;
case R.id.btn3:
i = new Intent(this, Activity3.class);
startActivityForResult(i, 202);
break;
case R.id.btn4:
i = new Intent(this, Activity4.class);
i.putExtra("Extra", data_global);
startActivity(i);
break;
}
我在Activity X
中的onActivityResult
方法中获取数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case 200:
String extra1 = data.getStringExtra("Extra1");
if (extra1 != null && !extra1.isEmpty()) {
data_global += extra1;
}
break;
case 201:
String extra2 = data.getStringExtra("Extra2");
if (extra2 != null && !extra2.isEmpty()) {
data_global += extra2;
}
break;
case 202:
String extra3 = data.getStringExtra("Extra3");
if (extra3 != null && !extra3.isEmpty()) {
data_global += extra3;
}
break;
}
}
}
而活动1、2或3中的代码如下所示:(X
在Extra中指代1、2或3)
case R.id.btnSave:
Intent resultIntent = new Intent();
resultIntent.putExtra("ExtraX", "name");
setResult(Activity.RESULT_OK, resultIntent);
finish();
break;
我该如何解决这个问题?非常感谢。
英文:
everyone. I have started to write(1-month-old) Android apps and I am pretty new this stuff.
I have a activity X. On that activity X, I have four different buttons calls four different activities. On those three activities, I have button, and I am returning data to activity X after I pressed button. Also, on the activity X, I may not call all three of the activies. I might call just 1,3 or just 2,3. I have looked a lot but I could not find what I seek for.
EDIT: when I put finish();
to activity 1,2,3, I could call one of the activies(assume activity one called) and able to grab data, and returns the Activity X, but when I started to call other one (assumed activity 2 called), I could go to this activity, but I cannot return from it since it does know where to return.
This is what I seek for:
Activity X-> 1st activity -> return data1 to X
Activity X-> 2nd activity -> return data2 to X
Activity X-> 3rd activity -> return data3 to X
Activity X-> send data1 + data2 +data3 to 4th activity
I started my three activities on Activity X
like this under onClick
method
(data_global
is global on Activity X class)
case R.id.btn1:
Intent i = new Intent(this, Activity1.class);
startActivityForResult(i, 200);
break;
case R.id.btn2:
i = new Intent(this, Activity2.class);
startActivityForResult(i, 201);
break;
case R.id.btn3:
i = new Intent(this, Activity3.class);
startActivityForResult(i, 202);
break;
case R.id.btn4:
i = new Intent(this, Activity4.class);
i.putExtra("Extra", data_global);
startActivity(i);
break;
I take my data from here on Activity X
under onActivityResult
method:
switch (requestCode) {
case (200): {
if (resultCode == Activity.RESULT_OK) {
if (data.getStringExtra("Extra1").length() != 0) {
data_global += data.getStringExtra("Extra1");
}
}
break;
}
case (201): {
if (resultCode == Activity.RESULT_OK) {
if (data.getStringExtra("Extra2").length() != 0) {
data_global += data.getStringExtra("Extra2");
}
}
break;
}
case (202): {
if (resultCode == Activity.RESULT_OK) {
if (data.getStringExtra("Extra3").length() != 0) {
data_global += data.getStringExtra("Extra3");
}
}
break;
}
And any of activity 1 or 2 or 3 code is like that:(X
is at the end on Extra referring to 1,2,3)
case R.id.btnSave:
Intent resultIntent = new Intent();
resultIntent.putExtra("ExtraX", "name");
setResult(Activity.RESULT_OK, resultIntent);
finish();
break;
How can I solve my problem? Many thanks.
答案1
得分: 1
你需要在每个活动的意图中指定当前活动和目标活动,如下所示:
case R.id.btnSave:
Intent resultIntent = new Intent(Activity1.this, MainActivity.class);
并且对于其他活动也要重复这样做。
英文:
You need to specify the current and destination activity in your intent in each activity as below
case R.id.btnSave:
Intent resultIntent = new Intent(Activity1.this, MainActivity.class);
and repeat that for the other activities.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论