我在下面添加了我的代码,包括我尝试过的一些东西。我想要的是一个滑动查看器,它不允许您通过以前的项目,而只能向前。如果在当前片段中选中某个复选框,允许前进到下一个片段,我最好也只允许向前(从右到左)滚动。
我考虑过
- 一旦显示当前片段并处于空闲状态,就删除前一个片段
mPager.setAdapter(mPagerAdapter);
一旦我重置了计数并删除了第一个片段以导致“刷新”,再次设置适配器(即:)- 在 ViewPager 上使用 onTouchListener 并使用 motionevent
下面使用的代码mPager.removeViewAt(0)
不起作用,因为它不会阻止滚动,只是从字面上删除视图,留下一个空白屏幕。
最好的方法是什么?也许我什至没有使用正确的适配器,因为我从昨天开始使用片段。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setOnPageChangeListener(mPageListener());
}
public OnPageChangeListener mPageListener() {
OnPageChangeListener listener = new OnPageChangeListener() {
public void onPageSelected(int arg0) {}
public void onPageScrolled(int arg0, float arg1, int arg2) {}
public void onPageScrollStateChanged(int arg0) {
if (arg0 == ViewPager.SCROLL_STATE_IDLE && mPager.getCurrentItem() != 0) {
mPager.removeViewAt(0);
mPagerAdapter.notifyDataSetChanged();
//mPagerAdapter.destroyItem(mPager, arg0, mPagerAdapter.getItem(arg0));
}
}
};
return listener;
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Bundle args = new Bundle();
args.putInt("position", position);
Fragment fragment = new PracticeModeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return 5;
}
}
public class PracticeModeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.row,
container, false);
((TextView) rootView.findViewById(R.id.count)).setText(""
+ getArguments().getInt("position"));
return rootView;
}
}