从Activity获取嵌套片段

mom*_*oja 2 android fragment android-fragments

我有一个包含Fragment F的Activity A.在Fragment F的xml文件中,我有一个名为"container"的FrameLayout.在这个容器中,我需要时加载片段X和Y.

现在,有没有办法让我确定片段F当前正在显示X和Y之间的哪个?

在活动A中,我想实现

onBackPressed(){
    if(F is displaying X)
        super.onBackPressed();
    else //Y is currently displayed
        //replace fragment Y with fragment X
Run Code Online (Sandbox Code Playgroud)

我想我可能需要打电话

    getSupportFragmentManager().findFragmentByTag("F"). ?? 
Run Code Online (Sandbox Code Playgroud)

这就是我替换X和Y的方式

public void showFragment(Fragment f){
    getChildFragmentManager().beginTransaction().replace(R.id.container, f).commit();
    currentChildFragment = f;
}
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?非常感谢!

gal*_*lex 5

如果我做对了,你有Activity - > Fragment with container,在那个容器中,你在X和Y之间放置/替换片段.为什么你有片段(F)级别?

无论如何,您正在通过id替换片段,因此您可以使用findFragmentById检索当前片段

Fragment fragment = getChildFragmentManager().findFragmentById(R.id.container);
if(fragment != null){
  if(fragment instanceof FragmentX) (..)
  else (..)
}
Run Code Online (Sandbox Code Playgroud)

该代码可以作为F片段的方法包含(因为我们使用getChildFragmentManager()).要将该信息发送回活动本身,必须找到F片段(它必须具有id)并调用该方法来检查显示哪个片段(X或Y).如果你删除片段F级别可以简化,但我猜你在其他地方重用了相同的片段.