我在下面添加了我的代码,包括我尝试过的一些内容。我想要的是一个滑动的viewpager,它不允许你通过以前的项目,但只允许前进。优选地,如果在当前片段内检查某个复选框以允许进行到下一个,则我还希望仅允许向前(从右到左)滚动。
我考虑过
mPager.setAdapter(mPagerAdapter);
)下面使用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;
}
}
答案 0 :(得分:2)
我认为您使用的是错误的工具。 ViewPager不应该以这种方式使用。
只需使用FragmentManager和FragmentTransactions替换片段即可。通过这样做,您可以完全控制后台堆栈和事务。
您还可以手动向片段添加手势以模拟ViewPager效果。 Here's a tutorial for that.