fragment內嵌fragment之間傳值+切換fragment

跳轉:

從一個Fragment跳轉到另一個Fragment

android從fragment跳轉到fragment問題解決

[Android]Fragment的四種跳轉

 

傳值:

activity嵌套fragment,fragment內嵌fragment之間傳值切換fragment

嵌套Fragment的使用及常見錯誤

android 佈局中Fragment嵌套Fragment

Android Support v4 支持包中 Fragment用法

 

使用activity的fragmenttransation的replace方法替換

private void changeToAnotherFragment(){
    //如果是用的v4的包,則用getActivity().getSuppoutFragmentManager();
    FragmentManager fm = getActivity().getFragmentManager();
	
    //注意v4包的配套使用
    Fragment fragment = new 目標fragment();
    fm.beginTransaction().replace(容器控件id,fragment).commit();
}

 ================================================================================

 

當在使用activity嵌套fragment,fragment再嵌套子fragment時,相當於有兩層fragment,假設最外層爲第一層,其中一個Fragment爲ParentfragmentA,該ParentFragmentA中又嵌套了三個fragment,也就是說第二層爲ChildFragment1,ChildFragment2,ChildFragment3,如果想在其中一個子fragment中的控件點擊切換到同一層的另一個子fragment

 

如圖,在第二層fragment中,child1fragment中有兩個控件viewI和viewII,點擊viewI可以切換到同一層的fragment,比如,點擊切換到ChildFragment2

 

實現如下:

在點擊viewI時進行如下操作

 FragmentManager manager = getFragmentManager();//獲取到父fragment的管理器  
 //獲取到父parentFragment  
 ParentFragmentA home = (ParentFragmentA) manager.getFragments().get(0);  
//獲取到ParentFragment的mViewPager變量        
 home.mViewPager.setCurrentItem(1);  

 說明一下,ParentFragmentA中聲明的mViewPager必須爲public。

 

說一下getFragmentManger方法

/** 
   * Return the FragmentManager for interacting with fragments associated 
   * with this fragment's activity.  Note that this will be non-null slightly 
   * before {@link #getActivity()}, during the time from when the fragment is 
   * placed in a {@link FragmentTransaction} until it is committed and 
   * attached to its activity. 
   * 
   * <p>If this Fragment is a child of another Fragment, the FragmentManager 
   * returned here will be the parent's {@link #getChildFragmentManager()}. 
   */  
  final public FragmentManager getFragmentManager() {  
      return mFragmentManager;  
  }  
  
  /** 
   * Return a private FragmentManager for placing and managing Fragments 
   * inside of this Fragment. 
   */  
  final public FragmentManager getChildFragmentManager() {  

 

官方API已經寫明,getFragmentManger方法:如果該fragment是另一個fragment的子fragment,則獲取到的是父fragment的manager

getChildFragmentManager方法:獲取到外層fragment的子fragment的manager

 

 

對於viewII的點擊事件,實現從Child1切換到ParentB

//獲取到 所依附的activity對象  
  InitEmptyKeyActivity activity  = (InitEmptyKeyActivity) getActivity();  
 activity.mViewPager.setCurrentItem(IntentConstant.MANAGE_AND_OP_FRAGMENT); 

 ..

 

 

 

 

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