2017-05-15 18 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(文字列の文字列T ){ 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クラスを作成し、このコードを貼り付け:

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

こんにちはPang .....私はあなたのコードを試みたが、それは動作していません.......それはタブと断片も表示されません....とにかく返信のおかげで –

+0

どのようにxmlを定義します。 –

関連する問題