Android Viewpager как динамически удалить фрагмент?

Я несколько дней боролся с созданием функциональности в моем приложении, которая позволяет пользователю удалить страницу / фрагмент из Viewpager, я попытался изменить свой FragmentPageAdapter на FragmentStatePageAdapter и переопределить мой getItemPosition() на return POSITION_NONE;, однако это все еще не позволяет мне динамически удалять фрагмент, когда я вызываю fragments.remove(page);

pageAdapter.notifyDataSetChanged();

Кто-нибудь делал это раньше успешно? Кажется, это должно быть очень просто, но этого не было, ниже мой адаптер фрагмента, любая помощь будет иметь большое значение, спасибо!

class MyPageAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> fragments;

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {

        super(fm);

        this.fragments = fragments;

    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @Override
    public Fragment getItem(int position) {

        return this.fragments.get(position);

    }

    @Override
    public float getPageWidth(int position) {

        if (position == 0) {
            return (0.75f);
        } else {
            return (1f);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {

        MyFragment theFragment = (MyFragment) this.fragments.get(position);

        return theFragment.returnTitle();

    }

    @Override
    public int getCount() {

        return this.fragments.size();

    }

}



Ответы (1)


Используйте ViewPagerIndicator Джейка Уортона. Он также имеет образец приложения с открытым исходным кодом с этой функциональностью (добавление и удаление фрагментов из меню параметров).

Вставьте это в свой адаптер:

public void setCount(int count) {
    if (count > 0 && count <= 10) {
        mCount = count;
        notifyDataSetChanged();
    }
}

И это добавление страницы:

    if (mAdapter.getCount() < 10) {
        mAdapter.setCount(mAdapter.getCount() + 1);
        mIndicator.notifyDataSetChanged();
    }

Вот как удалить страницу:

if (mAdapter.getCount() > 1) {
                mAdapter.setCount(mAdapter.getCount() - 1);
                mIndicator.notifyDataSetChanged();
            }
person keybee    schedule 27.08.2013
comment
Я решил уничтожить деятельность и перезапустить ее, вероятно, самый грязный из возможных методов достижения того, чего я искал, но он работает, и я потратил на это достаточно времени в данный момент, lol - person Edmund Rojas; 27.08.2013