上一篇解決了【Android解決Fragment跳轉到Fragment頁面問題,相同或不同宿主Activity解決方法】
背景:我的問題是在主頁面出現的,硬是要從跳過好幾層的Activity中點擊一下就要跳到主頁面中的任意一個fragment頁面。Activity跳轉到Fragment首先我試過廣播是不好使的,因爲會出現…… after on saveInstance錯誤。
處理:Activity跳到fragment
其實簡單的說Activity跳fragment很簡單,在activity中寫上這段代碼,在跳轉到該activity的時候用根據傳的值判斷加載哪個fragment即可
例如:傳一個1過來是加載DownloadFragment的,在該activity中就直接獲取的值,然後加載這個即可
if(getIntent().getStringExtra("value").equals("1")){
gotoDownloadFragment();
}
private FragmentManager fmanager;
private FragmentTransaction ftransaction;
public void gotoDownloadFragment() { //去下載頁面
fmanager = getSupportFragmentManager();
ftransaction = fmanager.beginTransaction();
DownloadFragment mDownloadFragment = new DownloadFragment();
ftransaction.replace(R.id.rl_fragment_container, mDownloadFragment);
ftransaction.commit();
}
但是如果你是通過該activity中的fragment跳轉到其他activity之後,想在其他activity中再跳回來到指定的fragment而不重新加載activity,就得通過下面的方法了。
首先明確我們的目的:Activity跳轉到fragment要經過好幾個Activity的跳轉,先從AActivity爲入口AActivity->BActivity->CActivity一直跳轉之後,再從CActivity中跳轉到AActivity的DownloadFragment界面。
首先,在AActivity的包含的fragment其中的personFragment中要跳到BActivity要這樣寫:
startActivityForResult(new Intent(context, BActivity.class),1); //帶值是1的請求碼過去
然後,在BActivity中要跳轉到CActivity的按鈕點擊事件中也寫:
startActivityForResult(new Intent(context, CActivity.class),1); //帶值是1的請求碼過去
然後,到了終點CActivity了,到了這兒我就是要點擊按鈕事件一下子跳轉到AActivity的DownloadFragment的頁面去。這兒點擊事件中設置一個結果碼finish掉自己返回:
setResult(2); //結果碼和請求碼互不影響,設值任意
finish();
然後,在BActivity中,重寫一個方法判斷結果碼和請求碼,如果正確再finish掉自己:@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
setResult(2);
finish();
}
}
然後,又回到了AActivity的其中一個personFragment那個入口了頁面了。在這個頁面中重寫方法再判斷一下:@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity. gotoDownloadFragment ();
}
}
最後,是要在AActivity中寫上:
private FragmentManager fmanager;
private FragmentTransaction ftransaction;
public void gotoDownloadFragment() { //去下載頁面
fmanager = getSupportFragmentManager();
ftransaction = fmanager.beginTransaction();
DownloadFragment mDownloadFragment = new DownloadFragment();
ftransaction.replace(R.id.rl_fragment_container, mDownloadFragment);
ftransaction.commit();
}
好了,大功告成!思路跟上一篇差不多,還有不管是用Activity或fragment作爲入口都是可以的。這個就是,從哪兒進入,就得從哪兒出來。
紀實:2016.01.24