我已经将我的代码放在下面,包括我尝试过的一些东西。我想要一个滑动的viewpager,它不允许你通过以前的项目,只能向前。最好的情况是,如果当前片段中的某个复选框被选中,则仅允许向前(从右到左)滚动,以便进入下一个片段。
我已经考虑过:
- 当显示和闲置当前片段时删除上一个片段 - 重置计数并删除第一个片段后再次设置适配器(即:mPager.setAdapter(mPagerAdapter);)以引起“刷新” - 在ViewPager上使用onTouchListener并使用motionevent
下面的代码使用mPager.removeViewAt(0)无法工作,因为它不能阻止滚动,只是简单地删除视图,留下一个空白屏幕。
最好的方法是什么?也许我甚至没有使用正确的适配器,因为我昨天才开始使用片段。
我已经考虑过:
- 当显示和闲置当前片段时删除上一个片段 - 重置计数并删除第一个片段后再次设置适配器(即: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;
}
}