标签+ ViewPager + FragmentStatePagerAdapter - 如何删除片段? [英] Tabs + ViewPager + FragmentStatePagerAdapter - How to remove fragment?

查看:183
本文介绍了标签+ ViewPager + FragmentStatePagerAdapter - 如何删除片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用选项卡+刷卡的项目,我有困难的时候删除片段。

I'm using the "Tabs + Swipe" project and I'm having a difficult time removing a fragment.

步骤我做的:

  1. 从数据库中删除标签
  2. 从FragmentStatePagerAdapter数据源中删除标签
  3. 从动作条中删除选项卡。
  4. 在使用支持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.

我的适配器:

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();
        }
    }

我remove方法(片段中调用的):

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
        }

鸭preciate的帮助!

Appreciate the help!

推荐答案

您可以在这里找到答案 - <一href="http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android">Remove信息段从ViewPager在Android的

you can find the answer here - Remove Fragment Page from ViewPager in Android

好像缺少什么在你的code为覆盖以下适配器的方法:

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.

这篇关于标签+ ViewPager + FragmentStatePagerAdapter - 如何删除片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆