前幾天碰到這需求,我把這個記下了。
先假設類似的需求, 有兩個fragment(分別是FA,以及FB)依附在MainActivity , 從FA跳轉到ActivityC .按返回鍵返回到指定fragment FB 。
大家都覺得這其實很容易 ,只要在FA中加 startActivityForResult(intent, requestCode); ,再在Activity的返回事件中設置ActivityC.this.setResult(resultCode); , 以及在
MainActivity 中重寫 onActivityResult(int requestCode, int resultCode, Intent data) 方法。是的, 基本就是這樣的 ,但是當你使用的時候 ,你會發現MainActivity中的
onActivityResult 方法會出現沒有調用的情況, 簡單理解就是沒有返回到FB , 而是返回到默認的fragment。
怎麼達到我們的需求呢 , 第一,在FA中的startActivityForResult(intent, requestCode);方法前面加 getActivity(). 這樣可以讓FA的宿主MainActivit啓動目標ActivityC,這樣就可以在MainActivit 中重寫的 onActivityResult方法捕獲到返回值 , 接下來就可以在MainActivity中判斷requestCode以及 resultCode 來決定顯示哪個fragment。
一下分別是 FB中執行的代碼
getActivity().startActivityForResult(intent, 1);
ActivityC 事件執行的代碼:
// 這兩句是放在點擊返回控件觸發的事件裏面
ActivityC.this.setResult(2);
ActivityC.this.finish();
MainActivity的代碼:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/**
* 判斷requestCode, resultCode 來確定要執行的代碼
*/
if(requestCode==1 && resultCode == 2){
// 在這設置選中你要顯示的fragment
}
}
/**
* 捕捉返回鍵事件
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 當點擊返回鍵以及點擊重複次數爲0
if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
// 執行事件
<span style="font-weight: bold;">ActivityC</span>.this.setResult(2);
<span style="font-weight: bold;">ActivityC</span>.this.finish();
}
return false;
這樣就可以達到我們剛纔說的需求了。
如果你要傳參也是可以的。自己看下api。