我使用以下代码在活动中添加了一个片段:
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
}