更新2:删除所有v4支持引用修复它。 更新:我从头开始看看是什么触发了这种行为。一旦我添加了位置权限检查,就会发生这种情况。我不能倒退 - 即使我删除了所有权限代码,它仍与错误的pahaving FragmentStatePagerAdapger保持一致。
我有一个FragementStatePagerAdapter对于动态创建的片段的ViewPager工作正常,直到我使用appcompat-v7:23.2.1更改了我的compileSdkVersion并将SdkVersion从22改为23。现在,如果我尝试加载,比如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);
MyAdapter:
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");
}
升级后还有其他人经历过这种情况吗?在将这些轮子旋转几个小时后,我完全失去了。
答案 0 :(得分:2)
我发布评论的想法解决了这个问题,这里有相同的答案,还有一些细节......
简短版本:在源自FragmentStatePagerAdapter
的适配器中,尝试使用FragmentManager
代替SupportFragmentManager
。 除非您100%确定需要SupportFragmentManager
。
<强> 说明: 强>
问题中的代码看起来很不错。adapter
可能会混淆的唯一地方&#39;片段是方法instantiateItem(ViewGroup container, int position)
。此方法使用FragmentManager
作为构造函数的参数传递。因此,我们可以归咎于可疑的SupportFragmentManager
。
答案 1 :(得分:0)
要从DmitryO添加到the answer,如果使用android.app.Fragment
,则应使用FragmentManager,如果使用android.support.v4.app.Fragment
,则应使用SupportFragmentManager,这很简单。
两者都可以与支持库一起使用,即您可以将任何类型的Fragment放入AppCompatActivity中。
另请注意,如果要将android.app.Fragment
本机片段与FragmentPagerAdapter或FragmentStatePagerAdapter一起使用,则需要使用适配器的v13支持库版本,即android.support.v13.app.FragmentStatePagerAdapter
。
请注意,这最初是作为评论发布的,但我不希望此信息丢失。