1. 程式人生 > >Activity跳轉到巢狀中的Fragment

Activity跳轉到巢狀中的Fragment

 轉載請註明出處:http://blog.csdn.net/baidu_38639168/article/details/73456906   
        最近做的一個專案,突然出現了這個問題,Activity  
         中有四個fragment分別是 first, two, three, four,  
         預設顯示的是fragment a。在開發過程中,first中 跳轉  
         到另一個Activity ,將這個外部Activity命名為B吧...

我需要從first中跳轉到B中,完成一些設定,然後再從B中的返回按鈕回到three,three中也有一個viewpager(1,2,3),需要跳轉到3。但是使用startActivity()方法的結果是:可以實現從first到B的跳轉,但是從B跳到three出現了錯誤。苦思冥想一整天,找了好多部落格試了也沒有解決。第二天早上靈光一閃,改了幾個值,突然就跑通了。下面就分享一下這個案例。
首先是在B的跳轉到Activity,不多解釋,直接上程式碼

      button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent();
            i.setClass(BActivity.this, Activity.class);
            //一定要指定是第幾個pager,因為要跳到ThreeFragment,這裡填寫2
            i.putExtra("id",2);
            startActivity(i);
        }
    });


跳轉之後就是在Activity中,在這裡跳轉到three,這裡重寫了onResume()方法
相信有這個錯誤的童鞋一定都找過很多案例,這裡就不多做解釋了,直接上程式碼
//activity跳轉到fragment
@Override
protected void onResume() {
    int id = getIntent().getIntExtra("id", 0);
    if (id == 2) {
        Fragment fragmen = new ThreeFragment();
        FragmentManager fmanger = getSupportFragmentManager();
        FragmentTransaction transaction = fmanger.beginTransaction();
        transaction.replace(R.id.viewpager, fragmen);
        transaction.commit();
        mViewPager.setCurrentItem(2);//
        //幫助跳轉到指定子fragment
        Intent i=new Intent();
        i.setClass(RadioActivity.this,ThreeFragment.class);
        i.putExtra("id",2);
    }
    super.onResume();
}

最後是在ThreeFragment中接收,上程式碼

  @Override
public void onResume() {
    int id = getActivity().getIntent().getIntExtra("id", 0);
    if(id==2){
         vp.setCurrentItem(2);
    }
    super.onResume();
}
這樣就是全部的程式碼了。