TabFragment中的ViewPager未加载第二次

Daa*_*ers 50 android android-fragments android-viewpager android-nested-fragment

我正在尝试制作一个在片段中具有ViewPager的应用程序,该片段是TabHost的一部分.

一切都很好.我有我的tabbar,我可以切换标签.当我使用ViewPager切换到选项卡时,所有内容都正确显示.但是,只要我将此选项卡与ViewPager一起退出并返回此选项卡,我的内容就不会显示.如果我滚动到两侧,我会看到我的下一张图像.如果我回去两次,我也会看到图像被加载(可能是屏幕加载的)当我返回时我看到我的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;
}}
Run Code Online (Sandbox Code Playgroud)

该应用程序的模型

Daa*_*ers 171

我发现了这个问题.我花了两天时间,但嘿,这是固定的.

而不是使用

mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());
Run Code Online (Sandbox Code Playgroud)

你应该用

mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());
Run Code Online (Sandbox Code Playgroud)

这么多5个字符.

  • 男人,你永远不知道你今晚如何救我的屁股! (10认同)
  • 谢谢你救了我的一天...... :) (9认同)
  • 顺便说一下,不要去寻找类似getSupportChildFragmentManager()的东西,因为getChildFragmentManager()是Fragment的方法,而不是Activity的方法...... (7认同)

小智 45

我一直在搜索这个很久终于找到了解决方案.将你的页面适配器实例FragmentPagerAdapter更改为FragmentStatePagerAdapter 示例:

class PageAdapter extends FragmentStatePagerAdapter {
Run Code Online (Sandbox Code Playgroud)


小智 6

您应该使用getChildFragmentManager()代替getFragmentManager()FragmentStatePagerAdapter()代替。FragmentPagerAdapter()希望对某人有用。