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.
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;
}
}