如何获取由 FragmentTransaction.replace 方法创建的片段的引用



我使用以下代码在活动中添加了一个片段:

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.parent_fragment_container, new FolderStructureFragment());
ft.commit();

我的问题是我如何获得添加片段的引用。我已经搜索了很多与fragment和FragmentTransaction相关的关键字,但没有找到任何接近我要求的关键字,我认为这是一个非常基本的功能,应该提供给我们。任何帮助都非常感谢!

有两种主要的可能性:

  • 您可以自己记住参考资料
  • 按标签
  • 按标识

例如(按 ID 几乎相同(:

ft.replace(R.id.fragment_container, fragment, tagOfFragment);
getSupportFragmentManager().findFragmentByTag(tagOfFragment);

请尝试使用以下代码。

FolderStructureFragment folderStructureFragment = (FolderStructureFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.parent_fragment_container);
FolderStructureFragment folderStructureFragment = new FolderStructureFragment();
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.parent_fragment_container, folderStructureFragment);
ft.commit();

这里,folderStructureFragment是新添加片段的参考。

有一种简单的方法可以随时获取对片段的引用,那就是使用 TAG。每当您添加片段时,您都可以为其指定一个特定的标签,并且您可以随时使用相同的标签检索它。

这是您添加它的方式:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment myFragment = new MyFragment();
fragmentTransaction.add(R.id.fragment_container, myFragment,"myFragmentTag").commit();

现在比方说,在代码中的某个地方你需要引用这个片段,你只需要调用以下内容

MyFragment myFragment = (MyFragment)getSupportFragmentManager().findFragmentByTag("myFragmentTag");
if(myFragment != null && myFragment.isAdded()){ //you should always do this check when you retrieve fragment instances
//do whatever you need with it
}

最新更新