Remove and add page to FragmentPagerAdapter
adapter, android, android-fragments, android-viewpager, fragmentpageradapter
Solution
I have something that might help, I am not changing the `Fragment`, simply removing and adding it back. This will only change from the last position. In other words, if you had five `Fragments` and wanted to remove the third one then this will not work. I'm not sure this is the best solution, but here is what I have done:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
Then, as a sample I am using an add and remove `click` method:
public void remove(View v) {
// Change the count to whatever you would like
mSectionsPagerAdapter.setCount(1);
// Triggers a redraw of the PageAdapter
mSectionsPagerAdapter.notifyDataSetChanged();
}
public void add(View v) {
// Change the count back to the initial count
mSectionsPagerAdapter.setCount(2);
// Triggers a redraw of the PageAdapter
mSectionsPagerAdapter.notifyDataSetChanged();
}
I added a `setCount()` method to my `SectionsPagerAdapter`:
public void setCount(int count) {
this._count = count;
}
Changed `getCount()` to and added a default count:
private int _count = 2;
@Override
public int getCount() {
return this._count;
}
Here is my full `SectionsPagerAdapter`:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private int _count = 2;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
default:
return null;
}
}
public void setCount(int count) {
this._count = count;
}
@Override
public int getCount() {
return this._count;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return getString(R.string.fragment_title_one).toUpperCase(Locale.ENGLISH);
case 1:
return getString(R.string.fragment_title_two).toUpperCase(Locale.ENGLISH);
}
return null;
}
}
Problem
i am using a fragment pager adapter with 5 pages. and im setting the adapter to view pager as below ``` public class xxx extends FragmentPagerAdapter { final int PAGE_COUNT_LOGGED_IN = 6; final int PAGE_COUNT_LOGGED_OUT = 2; TextView oTextView = null; LayoutInflater inflater = null; PagerTabStrip m_oPageTabStrip = null; String m_strTab = null; String[] m_strArray = null; Context m_oContext = null; /** Constructor of the class */ public xxxx (Context context, android.support.v4.app.FragmentManager oFragmentManager) { super (oFragmentManager); m_oContext = context; } /** This method will be invoked when a page is requested to create */ @Override public Fragment getItem(int arg0) { xxxxFragment myFragment = new xxxFragment (); Bundle data = new Bundle(); data.putInt("current_page", arg0+1); myFragment.setArguments(data); return myFragment; } /** Returns the number of pages */ @Override public int getCount() { if (Utility.m_bIsLoggedIn == true) { return PAGE_COUNT_LOGGED_IN; } else { return PAGE_COUNT_LOGGED_OUT; } } @Override public CharSequence getPageTitle(int position) { String strText = " "; switch(position) { case 0: strText = getBaseContext().getString(R.string.ccc); break; case 1: strText = getBaseContext().getString(R.string.bbb); break; case 2: strText = getBaseContext().getString(R.string.bbb); break; case 3: strText = getBaseContext().getString(R.string.bbb); break; case 4: strText = getBaseContext().getString(R.string.bbb); break; case 5: strText = getBaseContext().getString(R.string.Sbbb); break; } } ``` and in fragment i create a linear layout individually for each page as below ``` bbb.m_oSharedPage = (LinearLayout) LayoutInflater.from(Utility.m_oService).inflate(R.layout.viewpage, null); iView = Utility._YOURS_SHARED; oCurrentPage = .m_oSharedPage; ``` and im setting the adapter as below ``` m_oPager.setAdapter(m_oPagerAdapter); ``` my question is how can i add and remove the 5th page dynamically...like for some case i need page 5 and some case i need to remove page 5.