2017-05-15 2 views
0

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.

+1

Post AttendanceViewFragment.newInstance Methode –

+0

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; } –

+0

diesen Code hinzufügen: if (titles.size()> 1) { viewPager.setOffscopePageLimit (titles.size() - 1); } nach viewPager.setAdapter (Adapter); –

Antwort

1

erstellen viewPagerAdapter Klasse und fügen Sie diesen Code:

public class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

Nach Adapter zu schaffen, fügen Fragment wie folgt aus:

ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFragment(new OneToOneChat(), "Chat"); 
adapter.addFragment(new GroupChatFragment(), "Group Chat"); 
viewPager.setAdapter(adapter); 
tabLayout.setupWithViewPager(viewPager); 
+0

Hallo Pang ..... Ich habe versucht Ihren Code, aber es funktioniert nicht ....... Es zeigt nicht einmal Tabs und Fragment .... trotzdem danke für die Antwort –

+0

Wie Sie XML für diese definieren. –

Verwandte Themen