Android 如何让ViewPager在I';我已滚动到下一页
如果我们在一个视图寻呼机中有4个页面,并且从0位置滑动,那么执行3 当我们到达位置2时,位置0处的物品被销毁,当我们到达位置4时,位置1处的物品被销毁 我需要立即销毁它们,因为如果我返回视图,我希望视图能够重新创建,而这在当前不会发生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) {
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尝试了无数次,但都没有成功。我不确定每次选择选项卡时如何重新创建片段。当片段对用户可见时,您仍然可以更新数据,而不是重新创建整个片段: