2016-07-14 45 views
2

我有一个(预先写好的)片段,访问为R.layout.myFragment。由于我必须将片段(也是预编写的代码)传递给ViewPager中的FragmentPagerAdapter,因此我试图将其作为getFragmentManager().findFragmentById(R.layout.myFragment)传递给它,但它返回null,可能是因为它预期的格式为R.id.something
我在这里发现了一些与实现谷歌地图片段相关的答案 - 但这些(我认为)并不适用于我的问题,因为我必须使用片段形式为R.layout.myFragment且没有父/容器片段(或据我所知,类似的东西)使用FragmentTransaction。
Fragment预计将在ViewPager的FragmentPagerAdapter的getItem()覆盖中返回。我怎样才能得到该片段通过它返回?我该如何返回这个片段?

+0

代码在哪里,你累了吗? – Nambi

+0

请考虑接受一个答案,如果它帮助你 – SoroushA

回答

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; 
}