Ich habe einen ViewPager mit einem TabLayout. Ich habe ViewPagerAdapter erstellt, indem ich FragmentStatePagerAdapter erweitert habe. Wenn ich ViewPager Swipe bekam ich folgende Fehlermeldungjava.lang.IllegalStateException: Fragment bereits hinzugefügt:
FATAL EXCEPTION: main
Process: com.anubavam.creatrix, PID: 21388
java.lang.IllegalStateException: Fragment already added: AttendanceViewFragment
Hier ist Code ViewPagerAdapter Klasse
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);
}
}
Dies ist die Art, wie ich Fragmente in ViewPager Adapter hinzugefügt:
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);
ich mit FragmentPagerAdapter versucht anstelle von FragmentStatePagerAdapter. Aber keine Verwendung. Schlagen Sie mir einen anderen Ansatz vor, um dieses Problem zu lösen.
Post AttendanceViewFragment.newInstance Methode –
public static AttendanceViewFragment newInstance (String s, String t) { AttendanceViewFragment fragTt = new AttendanceViewFragment(); Bundle bundTottal = neues Bundle(); bundTottal.putString ("Daten", s); bundTottal.putString ("Flagge", t); fragTt.setArguments (bundTotal); zurück fragTt; } –
diesen Code hinzufügen: if (titles.size()> 1) { viewPager.setOffscopePageLimit (titles.size() - 1); } nach viewPager.setAdapter (Adapter); –