Tabs + ViewPager + FragmentStatePagerAdapter - How to remove fragment?
10,244
you can find the answer here - Remove Fragment Page from ViewPager in Android
it seems what missing in your code is overwriting of the following adapter's method:
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
explanation why such "weird" solution works you can find in the answer to the question in the link I provided you.
![Lior Iluz](https://i.stack.imgur.com/8Fwye.jpg?s=256&g=1)
Author by
Lior Iluz
Updated on July 20, 2022Comments
-
Lior Iluz almost 2 years
I'm using the "Tabs + Swipe" project and I'm having a difficult time removing a fragment.
Steps I'm doing:
- Remove tab from database
- Remove tab from the FragmentStatePagerAdapter data source
- Remove tab from the actionBar.
- Remove fragment using Support FragmentManager.
The problem: After I perform the remove, for some reason, I can still scroll to the right and see an empty fragment. I can't select it, it just bounces back. It seems like the fragment is not being removed but rather changes its position to the tag from the left.
My Adapter:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = new TabFragment(); Bundle args = new Bundle(); args.putInt(TabFragment.ARG_TAB_POSITION, position); fragment.setArguments(args); return fragment; } @Override public int getCount() { return tabsList.size(); } @Override public CharSequence getPageTitle(int position) { return tabsList.get(position).getTitle(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); FragmentManager manager = ((Fragment)object).getFragmentManager(); android.support.v4.app.FragmentTransaction trans = manager.beginTransaction(); trans.remove((Fragment)object); trans.commit(); } }
My remove method (called from within the fragment):
public void removeTab() { mTabTableHandler.deleteTab(tab.getId()); //db tabsList.remove(tabPosition); //data source actionBar.removeTabAt(tabPosition); // actionbar getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); // support fragmentmanager tabsList = mTabTableHandler.query(); //requery db mSectionsPagerAdapter.notifyDataSetChanged(); //notify adapter }
Appreciate the help!
-
behelit over 5 yearssaved me, great solution