SupportFragmentManager

SupportFragmentManager

更新2:去掉所有的v4支持引用修复了它。
更新:我从头开始看是什么触发了这种行为。一旦我添加了位置权限检查,就会发生这种情况。我不能倒退——即使我去掉了所有的权限代码,它仍然保留在错误的bahaving fragmentstatepageradapger中。
我有一个fragementstatepageradapter,在我使用appcompat-v7:23.2.1将compilesdkversion和目标sdkversion从22更改为23之前,它对于动态创建片段的viewpager工作得很好。现在,如果我尝试加载,比如,a,b,c,它加载b,b,c,但是如果我向后滑动,我得到c,b,a,所以,这只是加载动态创建的片段a的初始尝试不成功。
下面是我如何设置适配器和viewpager的:

myAdapter = new MyAdapter(getSupportFragmentManager(), numItems);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(myAdapter);
viewPager.setCurrentItem(position);

我的适配器:
private class MyAdapter extends FragmentStatePagerAdapter {
    private final int size;

    public MyAdapter(FragmentManager fm, int _size)  {
        super(fm);
        size = _size;
    }

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

    @Override
    public Fragment getItem(int position) {
        String _id = myArray[position];
        return MyFragment.newInstance(_id);
    }
}

并实例化片段:
public static MyFragment newInstance(String _id)  {
        final MyFragment f = new MyFragment();
        final Bundle args = new Bundle();
        args.putString("_id", _id);
        f.setArguments(args);
        return f;
    }


@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        _id = getArguments().getString("_id");
    }

升级后还有其他人经历过吗?在这上面转了几个小时,我完全不知所措。

最佳答案

我发表评论的想法解决了这个问题,这里是同样的答案,还有一些细节…
短版本:在从FragmentStatePagerAdapter派生的适配器中,尝试使用FragmentManager而不是SupportFragmentManager。除非你百分之百确定你需要SupportFragmentManager
说明:
这个问题的代码看起来不错。adapter唯一能“混淆”片段的地方是instantiateItem(ViewGroup container, int position)方法。此方法使用作为构造函数参数传递的FragmentManager。所以我们可以责怪那个可疑的SupportFragmentManager

10-05 18:59