在viewpager中的当前位置之前和之后添加片段

时间:2017-10-27 14:20:31

标签: android android-fragments android-viewpager

我有ViewPager,其中包含Fragments。我想在当前位置之前和之后添加片段。这是适配器:

public class TabManager extends FragmentStatePagerAdapter {

    private final List<Fragment> list = new ArrayList<>();

    public TabManager(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public int getItemPosition(Object object) {
        if (object instanceof  Fragment) {
            return list.indexOf(object);
        }
        return POSITION_NONE;
    }

    @Override
    public Fragment getItem(int position) {
        return list.get(position);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    public void addFragment(Fragment fragment, int index) {
        list.add(index, fragment);
        notifyDataSetChanged();
    }

}

我可以在我的位置之后添加片段(它出现在ViewPager的右侧)没有问题。但是如果我在我的位置(ViewPager的左侧)之前添加一个新片段,ViewPager会立即关注它。

所以,我的问题是,如何在不聚焦的情况下向左侧添加新片段(让用户轻扫)?

换句话说,这里有一个片段:

1

^

我在右边添加一个新的,但第一个保持专注:

1 2

^

现在,如果我在左侧添加另一个,它会立即聚焦(这就是我不想要的):

3 1 2

^  

这应该是正确的:

3 1 2

  ^

1 个答案:

答案 0 :(得分:0)

抱歉,由于声誉无法发表评论。 如果您当前的位置是 0(1个片段),并且您将片段添加到右侧,则当前项目位置不会更改 - 0 (添加的片段不会更改它)

但如果您将片段添加到左侧(片段 1 之前),您的适配器的当前位置仍然 0 ,并且该位置上的片段现在片段3 ,不再是片段0 。所以我想在通知适配器之前你应该将适配器的位置更改为所需的项目(如果你添加之后 - 什么也不做,如果你之前添加 - 纠正你的位置)。 在您的情况下 - 将当前适配器位置设置为1而不是0。