7

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.

user1340801
  • 423
  • 3
  • 10
  • 21

1 Answers1

5

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;
    }
}
jnthnjns
  • 8,962
  • 4
  • 42
  • 65
  • 1
    hi...thanks for the answer...but i have tried it..the problem is ..when count is changed and notfy adapter is called the page is not sidplayed but the content of the page is displayed when i scrol the present last page...since the adpater has the last page created at the begining – user1340801 Apr 08 '13 at 07:13
  • That's odd, I don't get that same reaction, I am not able to scroll over to the page I have removed. – jnthnjns Apr 08 '13 at 12:27
  • no you cant scrol but when you elongate the scroll you can see the contents of that page...you wont see the title and all but just the content – user1340801 Apr 09 '13 at 11:41
  • Your problem - http://stackoverflow.com/questions/9061325/fragmentpageradapter-is-not-removing-items-fragments-correctly – zella Apr 01 '14 at 09:38