android從activity跳轉到fragment解決

  上一篇解決了【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












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