我有一个(预先写好的)片段,访问为R.layout.myFragment
。由于我必须将片段(也是预编写的代码)传递给ViewPager中的FragmentPagerAdapter,因此我试图将其作为getFragmentManager().findFragmentById(R.layout.myFragment)
传递给它,但它返回null,可能是因为它预期的格式为R.id.something
。
我在这里发现了一些与实现谷歌地图片段相关的答案 - 但这些(我认为)并不适用于我的问题,因为我必须使用片段形式为R.layout.myFragment
且没有父/容器片段(或据我所知,类似的东西)使用FragmentTransaction。
Fragment预计将在ViewPager的FragmentPagerAdapter的getItem()覆盖中返回。我怎样才能得到该片段通过它返回?我该如何返回这个片段?
2
A
回答
0
有两种可能的解决方案。两者都涉及遍历所有片段以找到您需要的片段。
正如didi_X8解释here,您可以使用Activity类的onAttachFragment方法来创建所有连接的片段的列表,并随后遍历它们:
List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>();
@Override
public void onAttachFragment (Fragment fragment) {
fragList.add(new WeakReference(fragment));
}
public List<Fragment> getActiveFragments() {
ArrayList<Fragment> ret = new ArrayList<Fragment>();
for(WeakReference<Fragment> ref : fragList) {
Fragment f = ref.get();
if(f != null) {
if(f.isVisible()) {
ret.add(f);
}
}
}
return ret;
}
另一种解决方案as explained by Michael是使用支持库并利用getFragments方法:
public List<Fragment> getVisibleFragments() {
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
if (allFragments == null || allFragments.isEmpty()) {
return Collections.emptyList();
}
List<Fragment> visibleFragments = new ArrayList<Fragment>();
for (Fragment fragment : allFragments) {
if (fragment.isVisible()) {
visibleFragments.add(fragment);
}
}
return visibleFragments;
}
代码在哪里,你累了吗? – Nambi
请考虑接受一个答案,如果它帮助你 – SoroushA