domingo, 17 de noviembre de 2013

Dynamic FragmentStatePagerAdapter

Here is an example of how to make a PagerAdapter that can add and remove fragments dynamically.

import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import java.lang.ref.WeakReference; import java.util.ArrayList; public class DynamicPagerAdapter extends FragmentStatePagerAdapter{     private ArrayList<WeakReference<Fragment>> registeredFragments = new ArrayList<WeakReference<Fragment>>();     public TouchPagerAdapter(FragmentManager fm) {         super(fm);     }     @Override     public Fragment getItem(int position) {         WeakReference<Fragment> weakReference = registeredFragments.get(position);         return weakReference.get();     }     @Override     public int getCount() {         return registeredFragments.size();     }     @Override     public int getItemPosition(Object object){         return PagerAdapter.POSITION_NONE;     }     public void add(Fragment f){         registeredFragments.add(new WeakReference<Fragment>(f));         notifyDataSetChanged();     }     public void remove(int position){         registeredFragments.remove(position);         notifyDataSetChanged();     } }
Example :
 pagerAdapter = new DinamicPagerAdapter(getSupportFragmentManager());
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(pagerAdapter);
        pagerAdapter.add(TouchMapFragment.newInstance());
        pagerAdapter.add(GridFragment.newInstance());
        pagerAdapter.remove(0);
        pagerAdapter.add(TouchMapFragment.newInstance());
        pagerAdapter.remove(0);
        pagerAdapter.add(GridFragment.newInstance());
 pagerAdapter = new DinamicPagerAdapter(getSupportFragmentManager());         viewPager = (ViewPager) findViewById(R.id.viewpager);         viewPager.setAdapter(pagerAdapter);         pagerAdapter.add(TouchMapFragment.newInstance());         pagerAdapter.add(GridFragment.newInstance());         pagerAdapter.remove(0);         pagerAdapter.add(TouchMapFragment.newInstance());         pagerAdapter.remove(0);         pagerAdapter.add(GridFragment.newInstance());