Tabs + ViewPager + FragmentStatePagerAdapter - 如何删除片段?

Lio*_*luz 10 android android-fragments android-fragmentactivity

我正在使用"Tabs + Swipe"项目,我很难删除片段.

我正在做的步骤:

  1. 从数据库中删除选项卡
  2. 从FragmentStatePagerAdapter数据源中删除选项卡
  3. 从actionBar中删除选项卡.
  4. 使用Support FragmentManager删除片段.

问题: 执行删除后,由于某种原因,我仍然可以向右滚动并看到一个空片段.我不能选择它,它只是反弹回来.似乎片段没有被移除,而是从左侧将其位置更改为标签.

我的适配器:

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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的删除方法(从片段内调用):

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
        }
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

Tal*_*nel 5

你可以在这里找到答案 - 从Android中的ViewPager中删除片段页面

似乎代码中缺少的是覆盖以下适配器的方法:

@Override
public int getItemPosition(Object object){
    return PagerAdapter.POSITION_NONE;
}
Run Code Online (Sandbox Code Playgroud)

解释为什么这种"怪异"的解决方案有效,你可以在我提供给你的链接中找到问题的答案.