Intereting Posts
Изменение цвета полосы прокрутки в Android Проблема сборки при использовании <cmath> с android ndk Как проверить имя сертификата и псевдоним в файлах хранилища ключей? Android: takePicture () не делает звук Какова процедура обнаружения, если устройство Android имеет возможность отправки SMS? Как создать библиотеку поддержки v4 из источника В Parse я могу заставить связанные ParseObjects получать? Java.lang.IllegalStateException: эта функция доступна только для экземпляров бэкэнд Что особенного в android: inputType = "textPersonName" для EditText Android FragmentTransaction.addToBackStack путаница Как реализовать индикатор выполнения загрузки файлов в android Кнопка фрагмента внутри триггера ViewPager onClickListener при неправильной ссылке Android: как сделать это без пробела между двумя кнопками в горизонтальном линейном режиме Получить ресурсы от другого apk Не удалось запустить «ЛЮБОЙ» ответный пример родного примера

Вкладки + ViewPager + FragmentStatePagerAdapter – Как удалить фрагмент?

Я использую проект «Tabs + Swipe», и мне сложно удалить фрагмент.

Шаги, которые я делаю:

  1. Удалить вкладку из базы данных
  2. Удалить вкладку из источника данных FragmentStatePagerAdapter
  3. Удалите вкладку из actionBar.
  4. Удалите фрагмент с помощью функции поддержки 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(); } } 

Мой метод удаления (вызванный внутри фрагмента):

 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 } 

Цените помощь!

Solutions Collecting From Web of "Вкладки + ViewPager + FragmentStatePagerAdapter – Как удалить фрагмент?"

Вы можете найти ответ здесь – Удалить страницу фрагмента из ViewPager в Android

Кажется, что в коде отсутствует код перезаписи следующего метода адаптера:

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

Объясните, почему такое «странное» решение работает, вы можете найти в ответе на вопрос в ссылке, которую я вам предоставил.

 public void removeAllFragments(ViewGroup container) { /* * keep this line because section pager adapter has * the bug to not delete the last fragment completely * -> so we add an empty fragment */ int iStart = 0; addFragment(new Fragment()); Fragment frag; int size = fragments.size(); for (int iPos = iStart; iPos < size; iPos++) { frag = getItem(iStart); if (frag.isAdded()) { destroyItem(container, iStart, frag); } fragments.remove(frag); notifyDataSetChanged(); } }