如何查看活动是否已恢复,因为堆栈顶部的另一个活动已调用finish()

时间:2015-08-26 18:23:39

标签: android android-fragments android-intent

我有一个视图寻呼机作为具有多个片段的主要活动。

此视图分页器中的一个片段启动另一个执行操作然后完成的活动(将其视为选择照片然后将其保存到数据库中)。

第二个活动完成后,我调用finish(),这会将我带回到我的视图寻呼机中的上一个片段。

但我需要知道包含视图寻呼机的活动是否已启动,因为第二个活动的finish()被调用来执行某些操作(例如加载照片)。

我不知道如何将此信息传递回上一个活动,我想避免使用带有额外标志的Intent(CLEAR_ACTIVITY_TOP),因为这意味着我必须在每个其他视图中重新创建状态寻呼机片段。

这可能吗?有没有办法找出哪个活动finish()导致当前活动变为活动状态?

非常感谢,

3 个答案:

答案 0 :(得分:2)

看看startActivityForResultActivity page的“开始活动和获得结果”部分下的更多文档。

  

有时您希望在活动结束时从结果中获取结果。例如,您可以启动一项活动,让用户在联系人列表中选择一个人;当它结束时,它返回被选中的人。要执行此操作,请使用标识该调用的第二个整数参数调用startActivityForResult(Intent,int)版本。结果将通过onActivityResult(int,int,Intent)方法返回。

答案 1 :(得分:1)

当您第一次进入第二项活动时,请按此调用。

arrayThatINeed = response.names;

请求代码是一个整数,可以让您确定稍后会返回结果的活动。

每当您完成第二项活动时,请在致电Intent intent = new Intent(this, YourSecondActivity.class); startActivityForResult(intent, requestCode); 之前发回所需的额外数据,例如

finish()

返回第一个活动,覆盖Intent intent = new Intent(); intent.putExtra("yourData", yourVariable); setResult(RESULT_OK, intent); finish(); 方法,并对返回的数据执行任何操作。

onActivityResult()

现在您应该能够识别返回的活动,并发回您可能需要的任何其他数据!

答案 2 :(得分:1)

您必须使用startActivityForResult(),您将在Parent Activity中的onActivityResult中获得结果。像这样的东西。

// Fragment in First Activity
Intent i = new Intent(this, SecondActivity.class);
getActivity().startActivityForResult(i, 1);

//SecondActivity if sending back results
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();

//SecondActivity if not sending results.

Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();

处理结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

 if (requestCode == 1) {
    if(resultCode == RESULT_OK){
        String result=data.getStringExtra("result");
    }
    if (resultCode == RESULT_CANCELED) {
        //Write your code if there's no result
    }
 }
}

参考 How to manage `startActivityForResult` on Android?