2015-05-26 66 views
0

我知道,当你想要在片段之间进行通信时,你应该通过父活动来完成。当两个片段处于同一水平时,这是有意义的。如果其中一个嵌套在第二个中“仅向上”返回“向下”是没有意义的。Android之间嵌套的片段之间进行通信

在这种情况下的图案是有道理的:

Activity 
    ____|____ 
/  \ 
Frag A Frag B 

它几乎没有什么意义使用,当一个被嵌套在另一个内的图案:

Activity 
     | 
    Frag A 
     | 
    Frag B 

是否可以接受使用findFragmentByTag直接进行通信(FRAG_X_TAG)如果一个嵌套在另一个中?

回答

0

这种模式的想法是使用ActivityController接口,其中Fragment s为View秒 - 他们发送UI事件给Controller,这反过来又更新它们适当。

这意味着这里真正的问题应该是“碎片A是碎片B的Controller” - 如果是的话,直接通信是可以接受的。如果两者都只是“愚蠢的观点”,他们真的不应该彼此了解。

底线是你想避免做意粉代码,这是可能的,只要你强制分离担忧。

+0

加载3子片段如果我没有理解,那么你说,这不应该导致任何问题,但这是不好的做法? – JY2k

+1

我在说,根据上下文,这可能是一个不好的做法 - 如果Frag A拥有正确显示Frag B所需的所有数据状态,那么它是Frag B的实际控制器,它不会是不好的做法。如果Frag A和Frag B的状态保存在Activity中,最好让Activity控制它们,而不是让Frag A控制Frag B. – npace

-1

如果你想在同一时间activte人数超过1个片段...然后使用的方法getChildFragmentManager()

例如:

我称 “ShareSpace的” 主片段,并具有3 CH ILD片段.. //在ShareSpace的片段

View view = inflater.inflate(R.layout.fragment_sharespace, container, false); 
    mTabletSize = getResources().getBoolean(R.bool.isTablet); 
    mContext=getActivity(); 
    ViewPager pager = (ViewPager) view.findViewById(R.id.pager); 

     ShareSpaceAdapter pagerAdapter = new ShareSpaceAdapter(mContext,getChildFragmentManager()); 
     pager.setAdapter(pagerAdapter); 
     mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs_share); 
     mSlidingTabLayout.setViewPager(pager); 

//适配器

public ShareSpaceAdapter(Context mContext, FragmentManager fm) { 
    super(fm); 
    this.mContext = mContext; 
    // TODO Auto-generated constructor stub 
    try { 
     if (home == null) { 
      homeFact = FactoryGenerator.getFactory(Constants.HOME); 
      home = homeFact.getHomeManagement(Constants.SHARESPACE); 
     } 
     local = home.readAssets(mContext); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public Fragment getItem(int arg0) { 
    Fragment frgmt = null; 

    switch (arg0) { 
    case 0: 

     frgmt = new ShareSpaceFiles(mContext); 
     break; 
    case 1: 

     frgmt=new ShareSpaceFolder(mContext); 
     break; 
    case 2: 

     frgmt = new ShareSpaceInbox(mContext); 
     break; 

    default: 
     break; 
    } 

    return frgmt; 
} 

@Override 
public int getCount() { 
    return PAGE_COUNT; 
} 

@Override 
public CharSequence getPageTitle(int position) { 

    switch (position) { 
    case 0: // Fragment # 0 - This will show FirstFragment 
     return local.getmFiles();//"FILES"; 
    case 1: // Fragment # 0 - This will show FirstFragment different title 
     return local.getmFolders();//"FOLDERS"; 
    case 2: 
     return local.getmMessages();//"MESSAGES"; 

    default: 
     return null; 

    } 

} 

它会在同一时间

+0

我想在他们之间进行沟通。不知道你是否正确理解我的问题。 – JY2k