從fragment跳轉到activity , 返回到指定fragment頁面

    前幾天碰到這需求,我把這個記下了。

    先假設類似的需求, 有兩個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
		}
		
	}


是不是就ok了呢 , 對的 。 不過當你按返回鍵時, 他還是會任性的 ,所以你需要在ActivityC 中捕獲返回鍵事件

	/**
	 *  捕捉返回鍵事件
	 */
	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。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章