1. 程式人生 > >Activity 跳轉到Fragment中(MainActivity中的Fragment)

Activity 跳轉到Fragment中(MainActivity中的Fragment)

Activity 跳轉到Fragment中(備註:MainActivity中的Fragment)

    如果大家有遇到這個問題 說明你來對了 樓主我可是踩了無數的坑,花了幾天的時間才把這篇文章寫下 

    現在App的模式一般都是Activity中多Fragment的模式 所以可能會有這種需求 就是Activity中需要跳轉到Fragment中的情況

    首先 MainActivity中有4個Fragment(FragementA,FragmentB,FragmentC,FragmentD ) 其中專案有需求 需要ActivityA 

    跳轉到FragmentA 中 有的人就會說了 很簡單嗎 直接跳轉到FragmentA中就可以了撒。

    那我就直接呵呵你一臉 要是這麼簡單

    我需要寫一遍文章來記錄不  既然出現了Fragment 那肯定需要FragmentManager 和FragmentTransaction,一個是Fragment管理器

    一個Fragment開啟事物的。

     因此大部分網上的資料都是這樣叫你這樣的寫法:

    FragmentManager fm=getSupportFragmentManager();
    FragmentTransaction ft=fm.beginTransaction();
    xxFragment xx=new xxFragment();
    ft.replace(R.ic.content,xx);
    ft.commit();

   我之前也是這麼做的 發現老是報id 找不到 所以我放棄了 後面知道原因了  嘿嘿 留個懸鏈;
   所以我就換了一種思路  直接由Activity中跳轉到MainActivity 然後通過MainActivity中來控制FragmentA的add或者replace();

   Intent intent = new Intent(getActivity(), MainActivity.class);
   intent.putExtra("id", 1);
   startActivity(intent);
   getActivity().finish();
   int id = intent.getIntExtra("id", 0);
    if (id == 1) {
            tb.switchContent(homeFragment);
       } 
    恩 這個頁面我傳了一個ID  
    在MainActivity中我 我接收了這個ID來作為判斷的條件 
    然後發現傳遞傳遞過來了 但是又出現了一個bug 在MainActivity中出現了回退棧(因為MainActivit的起名模式是stand)
    回退棧的意思就是 你按下的順序 activityA->activityB->activityC   然後你按下返回鍵的時候 就C->B->A  在這裡我是不需要回退的 
    所以我把MainActivity的實列設定我singleInstance 意思就是隻要有一個實列  但是這樣又出現問題了 發現設定MainActivity的啟動
   模式是singlestance 這裡出現了一個bug 。bug就是居然跳轉不了了  後面網上查資料 要在MainActivity中重新onNewIntent()的方法
    在這個方法裡面做判斷
@Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        int id = intent.getIntExtra("id", 0);
        if (id == 1) {
            tb.switchContent(homeFragment);
        }
}

這樣就解決了 無法跳轉的問題 並且也不會有回退棧了。 至於我的 這個tb.switchConten(homeFragment)的這個方法 很簡單的了 其實就是:
  FragmentManager fm=getSupportFragmentManager();
  FragmentTransaction ft=fm.beginTransaction();
  xxFragment xx=new xxFragment();
  ft.replace(R.ic.content,xx);
  ft.commit(); 
   哈哈 其實網上的資料是沒有錯了 只是之前我理解錯了 這個ID 是MainActivity中的 ID
  而且必須要是Framlayout中的ID 之前我一直設定為是跳轉的FragmentA中的ID 所以報錯的原因也就是當然ID就找不到了
  這個錯誤犯的真心冤枉  辛虧 後面還是圓滿解決了 並且也學到了很多的新的東西 就比如這個onNewIntent()的方法
  這個方法也只要在啟動模式為SingleTask 和SingleInstance的情況下 跳轉的時候需要重寫這個方法 才能接收到intent傳過來地方  值。