私はTabLayoutを持つViewPagerを持っています。 FragmentStatePagerAdapterを拡張してViewPagerAdapterを作成しました。私はViewPagerをスワイプすると、私は次のエラーここjava.lang.IllegalStateException:既にフラグメントが追加されています:
FATAL EXCEPTION: main
Process: com.anubavam.creatrix, PID: 21388
java.lang.IllegalStateException: Fragment already added: AttendanceViewFragment
をViewPagerAdapterクラスコードにされました
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
private List<AttendanceViewFragment> mFragments = new ArrayList<>();
private ArrayList<String> buttons = new ArrayList<>();
ViewPagerAdapter(FragmentManager fm, ArrayList<String> actionButtons) {
super(fm);
this.buttons = actionButtons;
}
void addFragment(AttendanceViewFragment frag) {
mFragments.add(frag);
}
@Override
public Fragment getItem(int position) {
return new AttendanceViewFragment();
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return buttons.get(position);
}
}
これは私がViewPagerアダプタにフラグメントを追加した方法です:
adapter = new ViewPagerAdapter(getSupportFragmentManager(), titles);
for (int i = 0; i < titles.size(); i++) {
//order of the fragment
if (i == 0) {
adapter.addFragment(AttendanceViewFragment.newInstance(studentList.toString(), "T"));
} else if (i == 1) {
adapter.addFragment(AttendanceViewFragment.newInstance(present.toString(), "P"));
} else if (i == 2) {
adapter.addFragment(AttendanceViewFragment.newInstance(absent.toString(), "A"));
} else if (i == 3) {
adapter.addFragment(AttendanceViewFragment.newInstance(late.toString(), "L"));
}
}
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
私はFragmentPagerAdapterてみましたFragmentStatePagerAdapterの代わりにしかし、使用しないでください。この問題を解決する他の方法を私に提案してください。
後AttendanceViewFragment.newInstance方法 –
パブリック静的AttendanceViewFragmentのnewInstance(文字列の文字列T ){ AttendanceViewFragment fragTt =新しいAttendanceViewFragment(); バンドルbundTottal =新しいバンドル(); bundTottal.putString( "data"、s); bundTottal.putString( "flag"、t); fragTt.setArguments(bundTottal); return fragTt; } –
このコードを追加:if(titles.size()> 1){ viewPager.setOffscreenPageLimit(titles.size() - 1); } viewPager.setAdapter(アダプタ)の後。 –