Add elements to the ViewPager dynamically

2

ViewPager adapter:

public class TabsWeekAdapter extends FragmentStatePagerAdapter  {
    private List<Fragment> fragments = new ArrayList<>();

    private List<String> titlesFragments = new ArrayList<>();

    public TabsWeekAdapter(FragmentManager fm) {
        super(fm);
    }

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

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

    public void addFragment(Fragment fragment, String title) {

        fragments.add(fragment);
        titlesFragments.add(title);
    }
    public void addFragment(int position,  Fragment fragment, String title) {
        try{
            fragments.add(position , fragment);
            titlesFragments.add(position, title);
        }catch (Exception e){
            Log.d("VIEWPAGER", e.getMessage());
        }
    }

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

Fragment:

public class WeekFragment extends Fragment implements ViewPager.OnPageChangeListener {

    private AppBarLayout appBarLayout;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private Calendar calendar;
    private TabsWeekAdapter tabsWeekAdapter;

    public WeekFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_week, container, false);

        if (savedInstanceState == null) {
            insertTabs(container);
            viewPager = (ViewPager) view.findViewById(R.id.pager);
            loadViewPager();
            tabLayout.setupWithViewPager(viewPager);
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        }
        return view;

    }
    private void loadViewPager() {
        tabsWeekAdapter = new TabsWeekAdapter(getFragmentManager());
        tabsWeekAdapter.addFragment(new DayFragment(), "1" );
        tabsWeekAdapter.addFragment(new DayFragment(), "2" );
        tabsWeekAdapter.addFragment(new DayFragment(), "3" );
        viewPager.setAdapter(tabsWeekAdapter);
        viewPager.addOnPageChangeListener(this);
    }
    private void insertTabs(ViewGroup container) {
        View father = (View) container.getParent();
        appBarLayout = (AppBarLayout) father.findViewById(R.id.appbar);
        tabLayout = new TabLayout(getActivity());
        tabLayout.setTabTextColors(Color.parseColor("#FFFFFF"), Color.parseColor("#FFFFFF"));
        appBarLayout.addView(tabLayout);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if(tabLayout != null){
            appBarLayout.removeView(tabLayout);
        }

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
            if (tabsWeekAdapter.getCount() == position + 1) {
                tabsWeekAdapter.addFragment(new DayFragment(), "nuevo fragment derecha");
                tabsWeekAdapter.notifyDataSetChanged();
            }
            if (0 == position) {

                tabsWeekAdapter.addFragment(0 ,new DayFragment(), "nuevo fragment izquierda");
                tabsWeekAdapter.notifyDataSetChanged();
            }

            Toast.makeText(getActivity(), tabsWeekAdapter.getCount() + " " + (position + 1), Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

Error:

E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.foxcode.weekfood, PID: 4849
  java.lang.IllegalStateException: Fragment already active
      at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:586)
      at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(
          FragmentStatePagerAdapter.java:114
      )
      at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1038)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1252)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1120)
      at android.support.v4.view.ViewPager$3.run(ViewPager.java:277)
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
      at android.view.Choreographer.doCallbacks(Choreographer.java:686)
      at android.view.Choreographer.doFrame(Choreographer.java:618)
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
      at android.os.Handler.handleCallback(Handler.java:751)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:154)
      at android.app.ActivityThread.main(ActivityThread.java:6119)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    
asked by Luigi Lizares 24.01.2017 в 16:06
source

0 answers