销毁前一个ViewPager项目以防止后退滚动

3
我已经将我的代码放在下面,包括我尝试过的一些东西。我想要一个滑动的viewpager,它不允许你通过以前的项目,只能向前。最好的情况是,如果当前片段中的某个复选框被选中,则仅允许向前(从右到左)滚动,以便进入下一个片段。
我已经考虑过:
- 当显示和闲置当前片段时删除上一个片段 - 重置计数并删除第一个片段后再次设置适配器(即: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;

    }

}
1个回答

2
我认为你使用的工具不对。ViewPager 不应该以那种方式使用。
只需使用 FragmentManagerFragmentTransactions 替换片段即可。这样,你将完全控制返回堆栈和事务。
你还可以手动向片段添加手势,以模拟 ViewPager 效果。这里有一个教程。

我在使用FragmentManager和transactions时遇到了麻烦。你能向我展示一下如何操作吗?谢谢!另外,手动手势是否允许我拥有相同的边缘滑动动画呢? - AndroidPenguin
你应该使用FragmentTransaction.replace [link](http://developer.android.com/reference/android/app/FragmentTransaction.html#replace(int, android.app.Fragment, java.lang.String))来移除旧的片段并在其上添加新的片段。关于手势,你需要先使用GestureBuilder SDK应用程序创建它们。请按照完整的教程进行操作。 - Robert Estivill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接