Android TabFragment中的ViewPager未再次加载
我正在尝试制作一个应用程序,该应用程序在Android TabFragment中的ViewPager未再次加载,android,android-fragments,android-viewpager,android-nested-fragment,Android,Android Fragments,Android Viewpager,Android Nested Fragment,我正在尝试制作一个应用程序,该应用程序在选项卡主机的片段中包含一个ViewPager。一切顺利。我有我的标签栏,我可以切换标签。当我使用ViewPager切换到选项卡时,所有内容都正确显示 但是,当我用ViewPager离开此选项卡并返回此选项卡时,我的内容不会显示。如果我向一侧滚动两次,我会看到下一幅图像,如果我返回两次,我也会看到图像被加载(可能是offscreenloaded) 查看我的TabFragment在返回时是否正在重新实例化,但ViewPager中的片段没有 @Override
选项卡主机
的片段中包含一个ViewPager
。一切顺利。我有我的标签栏,我可以切换标签。当我使用ViewPager
切换到选项卡时,所有内容都正确显示
但是,当我用ViewPager
离开此选项卡并返回此选项卡时,我的内容不会显示。如果我向一侧滚动两次,我会看到下一幅图像,如果我返回两次,我也会看到图像被加载(可能是offscreenloaded
)
查看我的TabFragment
在返回时是否正在重新实例化,但ViewPager
中的片段没有
@Override
public void onActivityCreated(Bundle savedInstanceState) {
mProjectText = (TextView) getView().findViewById(R.id.projectText);
mProjectText.setText(mActiveProject.getInspirationText());
mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());
mPager = (ViewPager)getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
super.onActivityCreated(savedInstanceState);
}
public class AlbumAdapter extends FragmentStatePagerAdapter {
private ArrayList<ProjectContent> mItems;
public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
super(fm);
this.mItems = items;
}
@Override
public Fragment getItem(int position) {
return AlbumContentFragment.newInstance(mItems.get(position));
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}}
@覆盖
已创建ActivityState上的公共无效(Bundle savedInstanceState){
mProjectText=(TextView)getView().findViewById(R.id.projectText);
mProjectText.setText(mActiveProject.getInspirationText());
mAdapter=newAlbumAdapter(getFragmentManager(),mActiveProject.getInspiration());
mPager=(ViewPager)getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
super.onActivityCreated(savedInstanceState);
}
公共类AlbumAdapter扩展FragmentStatePagerAdapter{
私有数组列表;
公共相册适配器(FragmentManager fm、ArrayList项){
超级(fm);
this.ms=项目;
}
@凌驾
公共片段getItem(int位置){
返回AlbumContentFragment.newInstance(mItems.get(position));
}
@凌驾
public int getCount(){
返回mItems.size();
}
@凌驾
public int getItemPosition(对象){
返回位置\无;
}}
我发现了这个问题。我花了两天的时间,但嘿,已经修好了 而不是使用
mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());
你应该使用
mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());
5个字符到此为止。我一直在搜索
这很长时间终于找到了解决方案。将页面适配器实例FragmentPagerAdapter
更改为FragmentStatePagerAdapter
例如:
你应该使用
getChildFragmentManager()
而不是getFragmentManager()
和FragmentStatePagerAdapter()
而不是FragmentPagerAdapter()
。希望它对某人有用。老兄,你永远不会知道你今晚是怎么救了我的!顺便说一句,不要费心寻找像getSupportChildFragmentManager()这样的东西,因为getChildFragmentManager()是一种片段而不是活动的方法……完美的,伙计,如果没有你的帖子,你永远不会发现这一点。它是有效的,但如果我们再次打开片段,显示第一个选项卡listview需要1秒的延迟。有什么解决办法吗?谢谢!这是因为我们在片段中添加了一个片段,对吗?但是如果它在活动中,它应该是getFragmentManager()
?这实际上让我的白领们感谢你们,在FragmentPagerAdapter到FragmentStatePagerAdapter之后,它开始工作了。这是一个简单而简短的回答。谢谢。在这个问题上花了很多时间,您的简单更改也起了作用。天哪,它解决了我的问题,但我在ViewPager中发现了碎片动态高度的问题,我的void OnMeasure在第二次显示时无法获得视图高度。正确答案是另一个,但这也有效。谢谢大家。虽然这是可行的,但它确实改变了片段的加载方式并保存在内存中。如果您想了解FragmentPagerAdapter的行为,另一种解决方案是正确的。您能解释一下为什么在FragmentPagerAdapter
上使用FragmentStatePagerAdapter
有效吗?
class PageAdapter extends FragmentStatePagerAdapter {