1. ホーム
  2. android

[解決済み] FragmentPagerAdapterのgetItemが呼び出されない

2022-07-28 14:18:54

質問

FragmentPagerAdapterでフラグメントを再利用できません。destroyItem()メソッドを使うと、フラグメントは削除されますが、getItem()が再度呼び出されることはありません。

public class ExamplePagerAdapter extends FragmentPagerAdapter {

    ArrayList < String > urls;
    int size = 0;
    public ExamplePagerAdapter(FragmentManager fm, ArrayList < String > res) {
        super(fm);
        urls = res;
        size = urls.size();
    }

    @Override
    public int getCount() {
        if (urls == null) {
            return 0;
        } else {
            return size;
        }

    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        FragmentManager manager = ((Fragment) object).getFragmentManager();
        FragmentTransaction trans = manager.beginTransaction();
        trans.remove((Fragment) object);
        trans.commit();
    }

    @Override
    public Fragment getItem(int position) {

        Fragment fragment = new FloorPlanFragment();
        Bundle b = new Bundle();
        b.putInt("p", position);
        b.putString("image", urls.get(position));
        Log.i("image", "" + urls.get(position));
        fragment.setArguments(b);
        return fragment;
    }
}

そしてFragmentActivityで。

pager.setAdapter(new ExamplePagerAdapter(getSupportFragmentManager(), res2)); 

どのように解決するのですか?

KISSの答えです。

簡単な使い方 FragmentStatePagerAdapter の代わりに フラグメントページャーアダプター .

私は答えを得ました。まず、私は非常に愚かな間違いをやっているので、この質問を削除することを考えたが、この答えは同じ問題に直面している誰かの助けになるであろう。 FragmentPagerAdapter の代わりに FragmentStatePagerAdapter .

コメントで@BlackHatSamuraiさんがおっしゃっているように。

これがうまくいく理由は FragmentStatePagerAdapter を破棄するからです。 を、使われていないフラグメントとして破棄するからです。 FragmentPagerAdapter では破壊しません。