0

我的应用程序是一个新闻应用程序,带有新闻列表片段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);

文章专辑适配器:

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();
}
}
4

1 回答 1

1

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

于 2013-11-27T15:26:15.283 回答