更新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
。