0

私のアプリは、ニュース リスト フラグメントNewsDetailsFragment(メニュー、検索などを含む) を備えたニュース アプリです。私は単一アクティビティ モデルを使用しており、各画面は Fragment で表されます。(ギャラリー)NewsDetailsFragmentが含まれています。ViewPager

最初に移動するNewsDetailsFragmentと、ギャラリーが読み込まれます。NewsDetailsFragmentフラグメントの新しいインスタンスを読み込むと、メニューから別のニュースを選択したり、検索を行ったりViewPagerしますNewsDetailsFragmentLogすべて正常に動作し、データが存在し、アダプターが getView() を呼び出します...

したがって、基本的に、ロードされたギャラリー ViewPager が 1 つある場合、それ以上NewsDetailsFragmentのギャラリーは表示されません。フラグメントがなくなるまで (したがって、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();
}
}
4

1 に答える 1

1

アクティビティの FragmentManager ではなく、ViewPager に現在の Fragment の getChildFragmentManager() を渡します。あなたの説明に基づいて、最初の ViewPager を作成するメイン画面も Fragment であると想定しています。ViewPager は Fragment の子であり、子 Fragment を作成しているため、メイン FragmentManager ではなく子 FragmentManager が必要です。

于 2013-11-27T15:26:15.283 に答える