【问题标题】:ViewPager in TabFragment is not loading a second timeTabFragment 中的 ViewPager 未再次加载
【发布时间】:2013-06-06 11:14:27
【问题描述】:

我正在尝试制作一个在属于TabHost 的片段中具有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;
}}

【问题讨论】:

    标签: android android-fragments android-viewpager android-nested-fragment


    【解决方案1】:

    我发现了问题。我花了两天时间,但嘿,它已经修好了。

    而不是使用

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());
    

    你应该使用

    mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());
    

    5 个字符就这么多。

    【讨论】:

    • 你永远不知道你今晚是如何拯救我的!
    • 顺便说一句,不要费心寻找像 getSupportChildFragmentManager() 这样的东西,因为 getChildFragmentManager() 是 Fragment 的一种方法,而不是 Activity 的方法......
    • 完美,伙计,如果没有你的帖子,永远不会找到这个。
    • 它可以工作,但是如果我们第二次打开片段,显示第一个选项卡列表视图需要 1 秒的延迟。有什么解决办法吗?
    • 谢谢!这是因为我们在片段中添加片段对吗?但是如果它在一个Activity中,它应该是getFragmentManager()?这实际上让我很开心
    【解决方案2】:

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

    class PageAdapter extends FragmentStatePagerAdapter {
    

    【讨论】:

    • 比你,在 FragmentPagerAdapter 到 FragmentStatePagerAdapter 之后它正在工作。这是简单而简短的答案。
    • 谢谢。在这个问题上花了很多时间,你的简单改变奏效了。
    • OMG,它解决了我的问题,但我发现 ViewPager 中 Fragment 的动态高度存在问题,我的 void OnMeasure 在第二次显示时无法获得视图高度。
    • 正确答案是另一个,但这也有效。谢谢大家。
    • 虽然这有效,但这确实改变了片段的加载和保存方式。如果您想要 FragmentPagerAdapter 的行为,另一种解决方案是正确的。
    【解决方案3】:

    您应该使用getChildFragmentManager() 而不是getFragmentManager()FragmentStatePagerAdapter() 而不是FragmentPagerAdapter()。希望它对某人有用。

    【讨论】:

    • 嘿,你能解释一下为什么使用FragmentStatePagerAdapter而不是FragmentPagerAdapter有效吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多