2017-05-15 2 views
0

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 대신. 그러나 사용하지 마십시오. 이 문제를 해결하기위한 다른 방법을 제안하십시오.

+1

포스트 AttendanceViewFragment.newInstance 방법 –

+0

공공 정적 AttendanceViewFragment 위해서, newInstance (String를, 문자열 t이 같은 조각을 추가,

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

어댑터를 만든 후를) { AttendanceViewFragment fragTt = 새로운 AttendanceViewFragment(); 번들 bundTottal = 새 번들(); bundTottal.putString ("data", s); bundTottal.putString ("flag", t); fragTt.setArguments (bundTottal); return fragTt; } –

+0

다음 코드를 추가합니다. if (titles.size()> 1) { viewPager.setOffscreenPageLimit (titles.size() - 1); } viewPager.setAdapter (어댑터) 이후}; –

답변

1

이 코드 viewPagerAdapter 클래스를 만들고 붙여 넣습니다

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

안녕하세요 냄새 ..... 나는 당신의 코드를 시도했지만 작동하지 않습니다 ....... 그것은 심지어 탭과 조각을 표시하지 않습니다 .... 어쨌든 답장을 주셔서 감사합니다 –

+0

어떻게 XML을 정의합니다. –

관련 문제