Activity 跳轉到Fragment中(MainActivity中的Fragment)
阿新 • • 發佈:2019-02-01
Activity 跳轉到Fragment中(備註:MainActivity中的Fragment)
在MainActivity中我 我接收了這個ID來作為判斷的條件
然後發現傳遞傳遞過來了 但是又出現了一個bug 在MainActivity中出現了回退棧(因為MainActivit的起名模式是stand)
回退棧的意思就是 你按下的順序 activityA->activityB->activityC 然後你按下返回鍵的時候 就C->B->A 在這裡我是不需要回退的
所以我把MainActivity的實列設定我singleInstance 意思就是隻要有一個實列 但是這樣又出現問題了 發現設定MainActivity的啟動
模式是singlestance 這裡出現了一個bug 。bug就是居然跳轉不了了 後面網上查資料 要在MainActivity中重新onNewIntent()的方法
在這個方法裡面做判斷
這樣就解決了 無法跳轉的問題 並且也不會有回退棧了。 至於我的 這個tb.switchConten(homeFragment)的這個方法 很簡單的了 其實就是:
而且必須要是Framlayout中的ID 之前我一直設定為是跳轉的FragmentA中的ID 所以報錯的原因也就是當然ID就找不到了
這個錯誤犯的真心冤枉 辛虧 後面還是圓滿解決了 並且也學到了很多的新的東西 就比如這個onNewIntent()的方法
這個方法也只要在啟動模式為SingleTask 和SingleInstance的情況下 跳轉的時候需要重寫這個方法 才能接收到intent傳過來地方 值。
如果大家有遇到這個問題 說明你來對了 樓主我可是踩了無數的坑,花了幾天的時間才把這篇文章寫下
現在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();
恩 這個頁面我傳了一個IDIntent 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); }
在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傳過來地方 值。