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.

Original source

Related problems