Android 带片段的寻呼机

Android 带片段的寻呼机,android,android-viewpager,Android,Android Viewpager,我的应用程序中有一个viewpager,它有7个片段,每个片段代表各自的逻辑 但是,有两个片段是相互耦合的,一个片段不能没有另一个片段而存在 我有两个按钮,在屏幕底部的“上一个”和“下一个”,在片段之间切换 我想使viewpager中的滑动无法到达其中一个耦合片段 现在我这样做了:我把第一个片段(耦合片段)放在位置0,第二个片段放在最后一个位置,这样当你左右滑动时,你最后到达第二个耦合片段 我想让你不能用刷子碰到最后一块碎片 怎么做 编辑: 片段适配器 public class Purchase

我的应用程序中有一个viewpager,它有7个片段,每个片段代表各自的逻辑

但是,有两个片段是相互耦合的,一个片段不能没有另一个片段而存在

我有两个按钮,在屏幕底部的“上一个”和“下一个”,在片段之间切换

我想使viewpager中的滑动无法到达其中一个耦合片段

现在我这样做了:我把第一个片段(耦合片段)放在位置0,第二个片段放在最后一个位置,这样当你左右滑动时,你最后到达第二个耦合片段

我想让你不能用刷子碰到最后一块碎片

怎么做

编辑:

片段适配器

public class PurchaseFragmentStatePagerAdapter extends FragmentStatePagerAdapter {

private List<BaseFragment> fragments;
private boolean shouldShowLastFragment;
@Inject
public PurchaseFragmentStatePagerAdapter(FragmentManager fm) {
    super(fm);
}

public void setFragments(List<BaseFragment> fragments) {
    this.fragments = fragments;
}

@Override
public BaseFragment getItem(int position) {
    return fragments.get(position);
}

@Override
public int getCount() {
    return fragments == null ? 0 : shouldShowLastFragment ? fragments.size() : fragments.size()-1;
}

public void enableItem(int i) {
    shouldShowLastFragment = true;
    notifyDataSetChanged();
}

public void disableItem(int i) {

    shouldShowLastFragment = false;
    notifyDataSetChanged();
}
公共类PurchaseFragmentStatePagerAdapter扩展了FragmentStatePagerAdapter{
私有列表片段;
私有布尔值shouldShowLastFragment;
@注入
公共采购FragmentStatePageRadapter(FragmentManager fm){
超级(fm);
}
公共void setFragments(列出片段){
this.fragments=片段;
}
@凌驾
公共BaseFragment getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
return fragments==null?0:shouldShowLastFragment?fragments.size():fragments.size()-1;
}
公共无效启用项(int i){
shouldShowLastFragment=true;
notifyDataSetChanged();
}
公共无效禁用项(int i){
shouldShowLastFragment=false;
notifyDataSetChanged();
}

}

我假设您有FragmentStatePagerAdapter或FragmentPagerAdapter

在适配器中,将
getCount()
方法设置为6,将确保无法访问最后一个片段

@Override
public int getCount() {
    return 6;
}

我仍然能够通过setCurrentItem(6)以编程方式访问它吗?如果您的getItem(position)方法支持它,我会这样认为,是的,您可以在getCount方法中使用一些逻辑,比如
return(shouldShowLastFragment)?7 : 6;启用/禁用最后一个片段。这不起作用,不幸的是,一旦片段被启用,并且你滑动到最后一页,如果你在最后一页后滑动一半,最后一个片段就在那里,并且一半可见,它不会让该页被选中,但它仍然显示出来这听起来很奇怪。如果getCount返回6,则不允许超出第6页。您介意发布适配器的代码吗?在我看来,您通过实现setFragments(List fragments)稍微破坏了适配器的用途。相反,您应该重写getItem(int位置),正如Erix在他的回答中所示,让适配器实例化各个片段。我怀疑这也是我的答案出现问题的地方。