FragmentPagerAdapter で ViewPager を使用して、2 つのフラグメント間でスワイプできるようにしています。私は FragmentStatePagerAdapter を使用していません。なぜなら、それらの間をスワイプするときに新しいフラグメントインスタンスを破棄して再作成し、フラグメントの 1 つで操作を複数回実行したくないからです)。FragmentPagerAdapter に渡す 2 つの作成されたフラグメントへの参照を取得する方法が必要ですが、次のコードはエラーを生成しています (以下を参照)。
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
誰でもこれで私を助けることができますか?
編集
次のことも試しましたが、各フラグメントを正確に 2 回 (当然のことながら) インスタンス化しますが、これは望ましくありません。それ以外は、次のコードで動作します。
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);
}