Android在Fragment中完成活动时检测到

时间:2017-08-30 09:50:47

标签: android android-fragments android-activity

我的MainActivity启动一个片段,这个片段启动MySecondActivity,当SecondActivity完成时,她启动了ThirdActivity。

我希望我的MainActivity能够在ThirdActivity完成时检测到。

我尝试使用onActivityResult,这是我完成MySecondActivity时的代码

  Intent intent = new Intent();
  setResult(Utils.RESULT_FROM_ORDER_FINISH, intent);
  OrderFinishActivity.this.finish();
  OrderFinishActivity.this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

在我的MainActivity中,我获得了onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Utils.RESULT_FROM_ORDER_FINISH) {
        // do thing
    }
}

Fragment使用

启动SecondActivity
Intent mainIntent = new Intent(activity, activityClass);
activity.startActivityForResult(intent, requestCode);

SecondActivity使用相同的代码启动第三个

但onActivityResult不是触发器,我认为片段得到了信息,我希望他将信息传递给MainActivity

3 个答案:

答案 0 :(得分:2)

更新问题

你能做的是

1 > startActivityForResult(SecondActivity).
2 > Finish SecondActvity set result_ok.
3 > In OnActivityResult of FirstActivity startActivityForResult(ThirdActivity).
4 > Finish ThirdActvity set result_ok. 
5 > In OnActivityResult of FirstActivity  do your stuff.

这里指出的是不要从SecondActivity启动ThirdActivity,而是从FirstActivity启动它。

答案 1 :(得分:1)

如果您要从片段

启动Second activity,请更换
startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

getActivity().startActivityForResult(intent,Utils.RESULT_FROM_ORDER_FINISH);

并替换

setResult(Utils.RESULT_FROM_ORDER_FINISH, intent);
// 1st parameter is not request code but result code

setResult(RESULT_OK, intent);
Second Activity

中的

答案 2 :(得分:0)

如果从片段中调用startActivityForResult并且您想要父活动触发器onActivityResult,则应该开始获取父活动实例的新活动:

//This way will work
getActivity().startActivityForResult(intent,Utils.RESULT_FROM_ORDER_FINISH);

//This way will not
startActivityForResult(intent,Utils.RESULT_FROM_ORDER_FINISH);