【问题标题】:ViewPager doesnt show images in more than 1 FragmentViewPager 不显示超过 1 个片段中的图像
【发布时间】:2013-11-27 15:15:29
【问题描述】:

我的应用是一个新闻应用,带有新闻列表片段NewsDetailsFragment(包含菜单、搜索等)。我使用的是单一活动模型,每个屏幕都由一个片段表示。 NewsDetailsFragment 包括一个 ViewPager(图库)。

当我最初导航到NewsDetailsFragment 时,画廊已加载,现在如果我加载NewsDetailsFragment 片段的新实例,从菜单中选择另一个新闻,进行搜索等。ViewPager 在第二个NewsDetailsFragment 不会显示图像,虽然Log 显示一切正常,数据在那里,适配器调用getView()...

所以基本上如果有 1 个加载的画廊 ViewPager,那么NewsDetailsFragment 将不会显示他们的画廊,只有当我按下 Back 直到我没有片段(因此没有 ViewPager 运行),只有当我打开一个新实例时NewsDetailsFragment 将加载图库。

我希望我解释清楚。我已经尽力了,现在我一无所知。

这是我在加载后将画廊数据传递给 ViewPager 的方式(代码摘自 NewsDetailsFragment):

ViewPager pager = (ViewPager) getView().findViewById(R.id.vpAlbum);
ArticleAlbumAdapter adapter = new ArticleAlbumAdapter(getActivity().getSupportFragmentManager(), article.album);
pager.setAdapter(adapter);

ArticleAlbumAdapter:

public class ArticleAlbumAdapter extends FragmentStatePagerAdapter
{
private List<String> urlList;

public ArticleAlbumAdapter(FragmentManager fm, List<String> urlList)
{
    super(fm);
    this.urlList = urlList;

    Log.d("ArticleAlbumAdapter()", "urlList=" + urlList);
}

@Override
public Fragment getItem(int position)
{
    Log.d("ArticleAlbumAdapter.getItem()", "position=" + position + ", url=" + urlList.get(position));

    Fragment image = new AlbumImageFragment();
    Bundle bundle = new Bundle();
    bundle.putString("url", urlList.get(position));
    bundle.putInt("pos", position);
    image.setArguments(bundle);

    return  image;
}

@Override
public int getCount()
{
    return urlList.size();
}
}

【问题讨论】:

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


    【解决方案1】:

    将当前 Fragment 的 getChildFragmentManager() 传递给 ViewPager,而不是 Activity 的 FragmentManager。根据您的描述,我假设您创建第一个 ViewPager 的主屏幕也是一个片段。由于 ViewPager 是您的 Fragment 的子级,而它又会创建子级 Fragment,因此它需要子级 FragmentManager 而不是主要的。

    【讨论】:

    • 你能给我一个sn-p代码吗?你的意思是把它传递给适配器吗?我也没有在 android.support.v4.app.Fragment API 中看到 getChildFragmentManager()
    • 谢谢,这解决了它。我使用的是旧版本的支持库,它没有 getChildFragmentManager()
    • 太棒了...很高兴你能成功!
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多