2017-05-15 61 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適配器的方式:我FragmentPagerAdapter試圖

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

而不是FragmentStatePagerAdapter。但沒用。建議我採取其他方法來解決這個問題。

+1

後AttendanceViewFragment.newInstance方法 –

+0

公共靜態AttendanceViewFragment的newInstance(字符串s串T ){ AttendanceViewFragment fragTt = new AttendanceViewFragment(); Bundle bundTottal = new Bundle(); bundTottal.putString(「data」,s); bundTottal.putString(「flag」,t); fragTt.setArguments(bundTottal); return fragTt; (titles.size()> 1){ } –

+0

add this code:if(titles.size()> 1){ viewPager.setOffscreenPageLimit(titles.size() - 1); } viewPager.setAdapter(adapter); –

回答

1

創建viewPagerAdapter類並粘貼此代碼:

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

創建適配器後,加入片段是這樣的:

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。 –

相關問題