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)