2017-07-25 46 views
0

我用下面的代码添加了一个活动中的一个片段参考:如何获得由FragmentTransaction.replace方法创建的片段

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

我的问题是如何获得增加的片段的引用。我搜索了很多关于fragment和FragmentTransaction的关键词,但没有发现任何接近我的要求的东西,我认为这是一个非常基本的功能,应该提供给我们。任何帮助深表感谢!

+0

可能的复制[获取当前片段对象](https://stackoverflow.com/questions/6750069/get-the-current-fragment-object) –

回答

2

有两大possiblities:

  • 您可以通过ID记得自己
  • 参考由标签
  • 通过ID

例如(几乎是相同的):

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

这对我不起作用。这可能是因为我在另一个片段中创建和操作片段,而不是一个活动。 – user1870797

+0

无论你在哪里创建它,你都应该能够找到可能性2和3的片段。只需从SupportFragmentManager调用findFragmentByTag即可。 – MPhil

+0

我总是通过调用getSupportFragmentManager()函数返回null。findFragmentByTag(tagOfFragment)或findFragmentByID(IDOfFragment);我甚至尝试过getChildFragmentManager,但仍然没有什么不同。 – user1870797

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

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

+0

在我的情况下,folderStructureFragment没有使用活动资源进行初始化。它只是一个简单的新班,而不是其父母活动的一部分。 – user1870797

+0

好吧,如果它是一个类,它可以通过这种方式进行初始化,然后可以在当前活动的任何地方使用'folderStructureFragment'作为对'FolderStructureFragment'类的引用。试一下。 –

+1

这听起来有可能解决。但我发现我现在可以通过调用findFragmentByID来获取片段。我可以在onClick事件中做到这一点。所以我猜我之前失败的原因是需要一点时间在父ViewGroup中创建并插入片段,因此在FragmentTransaction.commit之后立即调用findFragmentByID无法找到任何内容。 – user1870797

1

尝试使用下面的代码。

FolderStructureFragment folderStructureFragment = (FolderStructureFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.parent_fragment_container); 
+0

它不适合我。 – user1870797

+1

尝试使用'getChildFragmentManager()'添加或替换片段而不是'getActivity()。getSupportFragmentManager()' – codeWorm

+0

我试过了。它仍然是一样的。 – user1870797

0

有一种简单的方法可以在任何需要的时候获取对片段的引用,也就是使用TAG。每当你添加一个片段时,你可以给它一个特定的标签,并且你可以随时用相同的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 
} 
+0

对我来说不是运气。可能是我在另一个片段内创建并操作片段,但是是一个活动。 – user1870797

+0

如果您从活动中调用片段管理器,那么这没什么区别,即:getActivity()。getSupportFragmentManager()' – Ricardo

+0

这听起来有可能解决。但我发现我现在可以通过调用findFragmentByID来获取片段。我可以在onClick事件中做到这一点。所以我猜我之前失败的原因是需要一点时间在父ViewGroup中创建并插入片段,因此在FragmentTransaction.commit之后立即调用findFragmentByID无法找到任何内容。 – user1870797

相关问题