Intereting Posts
Состояние управления зависимостями проекта Android Выберите выпадающий список неактивен в браузере Android Эмулятор не запускает приложение OpenGL, сообщения которого «К сожалению, OpenGL ES 2.0 Basic остановлен» Использование контекстной панели действий с фрагментами Как переключиться на графический редактор в Android Studio? В нескольких приложениях используется один и тот же контент-провайдер Как вызвать веб-службу RESTful с Android? Я получаю намерение INSTALL_REFERRER из магазина приложений amazon? Подскажите пользователю оценить приложение Android в приложении Разрешение Android 6.0.GET_ACCOUNTS Как получить уникальный идентификатор устройства на Android? После удаления apk, когда я запускаю Debug, он сообщает мне, что пакет не установлен Как проверить файл существует или нет, и если не создать новый файл в SD-карте в async-задаче Слушайте изменения громкости на Android Есть ли карта Android PCI?

Вкладки + 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(); } }