web-dev-qa-db-ja.com

タブフラグメントのViewPagerが2回目に読み込まれない

TabHostの一部であるフラグメントにViewPagerがあるアプリを作成しようとしています。

すべてうまくいきます。タブバーがあり、タブを切り替えることができます。 ViewPagerでタブに切り替えると、すべてが正しく表示されます。しかし、ViewPagerでこのタブを離れてこのタブを返すと、コンテンツが表示されなくなります。横に2回スクロールすると、次の画像が表示されます。そして、2回戻ると、画像が読み込まれている(おそらくオフスクリーンロードされている)こともわかります。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;
}}

The mockup for the app

50
Daan Olislagers

問題が見つかりました。 2日かかりましたが、修正されました。

使用する代わりに

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

あなたは使うべきです

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

5人のキャラクターにとってはこれで終わりです。

162
Daan Olislagers

私はこれを長い間探していましたが、最終的に解決策が見つかりました。ページアダプタインスタンスFragmentPagerAdapterFragmentStatePagerAdapterの例に変更します。

class PageAdapter extends FragmentStatePagerAdapter {
43
rajesh v

getChildFragmentManager()の代わりにgetFragmentManager()を使用し、FragmentStatePagerAdapter()の代わりにFragmentPagerAdapter()を使用する必要があります。誰かに役立つことを願っています。

4
Akhtar