android從fragment跳轉到fragment問題解決

      背景:今天遇到一個問題,雖然不是很小但是也不是很大,就是從fragmentA準確的跳到fragmentB去,還有就是從Activity準確的跳到fragment 去,後面這個問題讓我想了好半天,最後還是處理了,處理這個問題就不要用廣播去傳值解決了,因爲會出現……  after on saveInstance錯誤。

     處理1:fragment跳到fragment的問題

    Fragment跳到fragment如果中間不經過切換兩個或兩個以上的宿主Activity的話是很簡單的,但是如果中間要更換宿主Activity這也能解決。

     先解決不經過切換宿主activity跳轉的fragment的跳轉,比如在主頁面就會經常用到幾個fragment相互切換,當然用fragment的回退棧也可以,但是如果不按順序去跳轉呢,而且底部圖標跟着變化呢,是不是會很麻煩呢。還是使用簡單的方法吧。
以MainActivity由幾個fragment組成爲例,要相互跳轉,先在宿主MainActivity裏面寫一個public方法:

private FragmentManager fmanager;
private FragmentTransaction ftransaction;
public void gotoDownloadFragment() {    //去下載頁面
    fmanager = getSupportFragmentManager();
ftransaction = fmanager.beginTransaction();
mDownloadFragment = new DownloadFragment();
ftransaction.replace(R.id.rl_fragment_container, mDownloadFragment);
ftransaction.commit();
}


這個方法就是MainActivity調用其他幾個fragment的方法,我比如我現在PersonFragment要去DownloadFragment,中間隔着好幾個其他Fragment,我只要在PersonFragment中獲取宿主的getActivity(),去調用宿主裏面的方法即可。

MainActivity  mainActivity = (MainActivity) getActivity();
mainActivity. gotoDownloadFragment ();

對,就這樣就切換到了DownLoadFragment,是不是很簡單。

    處理2:現在解決需要切換兩個不同宿主Activity中的兩個fragment之間進行切換。

    這兒就得使用startActivityForResult()了,startActivityForResult的主要作用就是它可以回傳數據,假設我們有兩個頁面,首先進入第一個頁面,裏面有一個按鈕,用於進入下一個頁面,當進入下一個頁面時,進行設置操作,並在其finish()動作或者back動作後,將設置的值回傳給第一個頁面,從而第一個頁面來顯示所得到的值。這個有一點像回調方法,就是在第二個頁面finish()動作或者back動作後,會回調第一個頁面的onActivityResult()方法。不明白可以參考網址:http://www.jb51.net/article/47599.htm

    舉個例子就知道了:

    首先我們的目的:BActivity中的BourFragment點擊跳轉按鈕跳轉到MainActivity中的DownloadFragment。

    我現在找一個入口是從MainActivity中的PersonFragment要跳轉到BActivity中的BourFragment,然而我們的目的是從BourFragment點擊跳轉到MainActivity中的DownloadFragment。一定要理清這個邏輯,耐心看。

    這個相當於是跑了一圈似的,但是首先要明確我們的目的。我提供的入口是PersonFragment,當然也可以是MainActivity中的任意fragment,這僅僅是個例子。

    首先,我們在PersonFragment中使用startActivityForResult的方式跳轉它的宿主Activity:

startActivityForResult(new Intent(context,BActivity.class),1); //requestcode設的是1
    然後在BourFragment中給跳轉按鈕中這樣寫:

BActivity bActivity= (BActivity) getActivity();
bActivity. onSetResult ();

這樣,一爲了響應PersonFragment,二是爲了finish掉BActivity,這樣豈不是又回到了MainActivity中,然後入口是PersonFragment,BActivity被finish掉之後,出口自然也是PersonFragment,因爲這個fragment的狀態未被銷燬掉,這個你可以參考:http://blog.csdn.net/wenxuzl99/article/details/16112725

    最後,既然又回到MainActivity中的PersonFragment了,我只要在這裏重寫onActivityResult方法判斷需求碼和結果碼就可以回到DownloadFragment了。當然一定要記得,在MainActivity中定義跳轉到DownloadFragment的public void gotoDownloadFragment()方法。

private MainActivity mainActivity;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == 2) {
        mainActivity = (MainActivity) getActivity();
        mainActivity. gotoDownloadFragment ();
    } 
}

    大功告成了!終於解決了,fragment之間相互跳轉的難題了。

    下一節說一下,要經過好幾個Activity的跳轉,從AActivity->BActivity ->CActivity一直跳轉之後,再從CActivity中跳轉到AActivity的DownloadFragment裏面。可以先思考一下,然後再參考我的思路。

   下一篇:【Android 解決Activity跳轉到任意Fragment的問題,或多層次Activity跳轉解決問題】

紀實:2016.01.24







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