Android 如何让ViewPager在I';我已滚动到下一页

Android 如何让ViewPager在I';我已滚动到下一页,android,android-viewpager,Android,Android Viewpager,如果我们在一个视图寻呼机中有4个页面,并且从0位置滑动,那么执行3 当我们到达位置2时,位置0处的物品被销毁,当我们到达位置4时,位置1处的物品被销毁 我需要立即销毁它们,因为如果我返回视图,我希望视图能够重新创建,而这在当前不会发生 public class ViewPagerTutorialAdapter extends FragmentStatePagerAdapter { public ViewPagerTutorialAdapter(FragmentManager fm) {

如果我们在一个视图寻呼机中有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);
    }
}

尝试
viewPager.setOffscreenPageLimit(1)。这应该只保存选定页面附近的一个页面。没有办法一次只根据

加载所选项目,虽然这并不是对所问问题的准确答案,但更好的做法是在不必要的情况下不重新创建视图,因为在更复杂的布局上这样做可能会花费高昂+导致口吃/额外延迟,这会让用户体验更糟


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

因为我希望在返回视图时重新创建视图
-为什么?创建视图的成本很高,您可能会遇到口吃。除了重新创建所有视图之外,可能还有一种更好的方法来执行任何您想执行的操作。每个页面都有一个背景图像_1。每当用户滑动并聚焦页面时,我都希望平滑地过渡到图像_1a。实现这一点的唯一方法是重新创建视图。否则,如果我转到0,1,2如果我转到0 1 2,然后再回到1,我可以看到已经转换到图像_1a的状态,与其再次查看动画,不如了解如何在片段中覆盖
setUserVisibleHint
,以便在片段可见时运行动画?ViewPager至少需要提前创建上一页和下一页视图,以便在开始滑动后看不到视图出现。相反,您应该在当前页面更改后重置动画。那么,我如何使片段在关注时重新创建?我使用onPageChangedListener尝试了无数次,但都没有成功。我不确定每次选择选项卡时如何重新创建片段。当片段对用户可见时,您仍然可以更新数据,而不是重新创建整个片段: