我正在使用带有 FragmentPagerAdapter 的 ViewPager 以允许在 2 个片段之间滑动。我没有使用 FragmentStatePagerAdapter,因为它在它们之间滑动时会破坏并重新创建新的片段实例,并且我不希望其中一个片段中的操作执行多次)。我需要一种方法来获取对 2 个创建的片段的引用以传递给 FragmentPagerAdapter,但以下代码会产生错误(见下文):
public class MyActivity extends FragmentActivity {
private ViewPager viewPager;
private MyPagerAdapter pagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
initViewPager();
}
private void initViewPager() {
List<Fragment> fragments = new ArrayList<Fragment>();
FragmentManager fragManager = getSupportFragmentManager();
fragments.add(fragManager.findFragmentById(R.id.fragment_1));
fragments.add(fragManager.findFragmentById(R.id.fragment_2));
pagerAdapter = new MyPagerAdapter(fragManager, fragments);
viewPager = (ViewPager) findViewById(R.id.fragment_pager);
viewPager.setAdapter(pagerAdapter);
}
...
...
private class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPagerAdapter(FragmentManager fragmentManager, List<Fragment> fragments) {
super(fragmentManager);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
...
...
这会产生以下错误(或类似错误):
java.lang.IllegalStateException: Can't change container ID of fragment Fragment1{4169f780 #1 id=0x7f0b0005 android:switcher:2131427331:0}: was 2131427333 now 2131427331
有人可以帮我吗?
编辑
我也尝试了以下方法,但它恰好将每个片段实例化两次(可以理解),这是我不想要的。除此之外,它适用于以下代码:
private void initViewPager() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments);
viewPager = (ViewPager) findViewById(R.id.fragment_pager);
viewPager.setAdapter(pagerAdapter);
}