在滚动到下一页后,如何使ViewPager立即销毁项目

时间:2015-09-12 13:39:40

标签: android android-viewpager

如果我们在View寻呼机中有4个页面,则从0位置滑动到3 当我们到达位置2时,位置0处的项目被销毁,当我们到达位置4时,位置1处的项目被销毁。

我需要立即销毁它们,因为如果我回到它,我希望重新创建视图,此时此刻不会发生。

public class ViewPagerTutorialAdapter extends FragmentStatePagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        Bundle args = new Bundle();
        args.putInt("page", position);
        TutorialPageFragment fragment = new TutorialPageFragment();
        fragment.setArguments(args);
        return fragment;
    }

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

public class TutorialPageFragment extends android.support.v4.app.Fragment {

    private ImageView ivTutorialPage;
    private TransitionDrawable myTransitionDrawable;
    private View rootView;

    public TutorialPageFragment() {
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_tutorial_page, container, false);
        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        ivTutorialPage = (ImageView) rootView.findViewById(R.id.ivTutorialPage);
        ivTutorialPage.setImageResource(R.drawable.fadein);
        myTransitionDrawable = (TransitionDrawable) ivTutorialPage.getDrawable();
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        myTransitionDrawable.startTransition(1000);
                    }
                });
            }
        }, 1000);
    }
}

2 个答案:

答案 0 :(得分:1)

试试viewPager.setOffscreenPageLimit(1);。这应该只在选定的一页附近保存一页。根据{{​​3}}

,无法一次只加载所选项目

答案 1 :(得分:1)

虽然这不是问题问题的完全答案,但更好的做法是不重新创建视图,如果没有必要,因为在更复杂的布局上做得昂贵+导致口吃/额外延迟,这会使用户体验变得更糟。

在这种情况下(当片段变得可见时运行动画)最好用片段覆盖片段中的setUserVisibleHint以运行动画,这将在用户访问屏幕时触发。主要优点当然是不需要重新创建视图,并允许Android自然地执行它的内部优化。