1

フラグメント内でビューページャーを使用しています。XML 経由で 2 つのページを切り替えるために pagerAdapter を使用しています。コードは次のとおりです。

public class DemoPagerAdapter extends FragmentPagerAdapter {

    public DemoPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {
        Fragment f;
        switch (index) {
        case 0:
            f = new FirstFragment(); 
            break;
        case 1:
            f =  new SecondFragment();
            break;
        }
        return f;
    }

    @Override
    public int getCount() {
        return 2;
    }
}

そして、私はそれを次のように呼んでいます:

public class DemoFragment1 extends Fragment {
private ViewPager viewPager;
private DemoPagerAdapter mAdapter;
public DemoFragment1() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.security, container, false);
    mAdapter = new DemoPagerAdapter(getActivity().getSupportFragmentManager());
    viewPager.setAdapter(mAdapter);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
                        showPages(position);
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
    return rootView;
}

すべて正常に動作します。しかし、DemoFragment2 に移動してから DemoFragment1 に戻ると、PagerAdapter は呼び出されません。

4

2 に答える 2

3

ViewPager は Fragment にネストされています。ChildFragmentManager を使用して、次のように変更する必要があります。

mAdapter = new DemoPagerAdapter(getChildFragmentManager());

また、ViewPager は画面外のフラグメントをメモリに保持すると想定しているため、getItem(int index)再度呼び出されることはありません。追加

viewPager.setOffscreenPageLimit(0);
return rootView;
于 2014-03-05T07:26:40.773 に答える