Android – Backstack при замене фрагмента в ViewPager

Я создаю ViewPager с тремя представлениями. На первом представлении находится ListView, где onItemClick заменяет этот фрагмент новым фрагментом с помощью WebView. И у меня есть две проблемы: при добавлении «transaction.addToBackStack (null)» или «transaction.setCustomAnimations (…)» Фрагмент с остановками WebView для отображения. Без этих строк это показывает, но я не могу сделать кнопку BACK, чтобы вернуться к списку.

Я создавал код на основе этого учебника и этого вопроса . В этом вопросе используется PagerAdapter, и я использую FragmentPagerAdapter. Также мне не нужно больше фрагментов, которые нужно заменить. Это может быть только один раз (из списка в webView и обратно).

Вот код моего адаптера:

public Fragment getItem( int position ) { Fragment fragment = null; switch ( position ) { case 0: // news if ( mFragmentAtPos0 == null ) { mFragmentAtPos0 = new NewsListFragment( new FirstPageFragmentListener() { @Override public void onSwitchToNewsFragment( String url, ViewGroup container ) { FragmentTransaction transaction = fm.beginTransaction(); transaction.setCustomAnimations( R.anim.rotate_in, R.anim.rotate_out, R.anim.rotate_in, R.anim.rotate_out ); WebViewFragment wv = new WebViewFragment( url, context ); transaction.replace( container.getId(), wv ); transaction.commit(); mFragmentAtPos0 = wv; notifyDataSetChanged(); } } ); } fragment = mFragmentAtPos0; break; case 1: fragment = new NewsInfoFragment( context, true ); break; case 2: fragment = new NewsInfoFragment( context, false ); break; } return fragment; } 

И фрагмент из onCreateView () этого фрагмента списка:

 listView.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick( AdapterView<?> parent, View view, int position, long id ) { if ( position < listNewsAdapter.getCount() - 1 ) { if ( listener != null ) { listener.onSwitchToNewsFragment( listNewsAdapter.getItem( position ).getNewsUrl(), container ); } } } } ); 

Ознакомьтесь с моим новым ответом на упомянутый вопрос: https://stackoverflow.com/a/11974777/685292

Вы можете увидеть пример, как реализовать простой обратный стекирование с помощью ViewPager самостоятельно, поскольку addToBackStack (null) не работает для фрагментов ViewPager . Также обратите внимание, что основной проблемой вашей проблемы является, вероятно, отсутствующий метод getItemId (int position) overriden.

В новой библиотеке поддержки дизайна я использую это решение
Вы можете использовать стек для хранения tabpositon, нажав позицию в стеке и вернувшись, используя стек pop.

В основной деятельности, где есть 3 фрагмента в viewpager, я создаю стек и данные push и pop.

 private Stack<Integer> stackkk; private ViewPager mPager; private int tabPosition = 0; mTabLayout.setupWithViewPager(mPager); mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { tabPosition = tab.getPosition(); mPager.setCurrentItem(tab.getPosition()); if (stackkk.empty()) stackkk.push(0); if (stackkk.contains(tabPosition)) { stackkk.remove(stackkk.indexOf(tabPosition)); stackkk.push(tabPosition); } else { stackkk.push(tabPosition); } } @Override public void onTabUnselected(TabLayout.Tab tab) { tabPositionUnselected = tab.getPosition(); } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } 

И в onBackPressed в деятельности,

 @Override public void onBackPressed() { if (stackkk.size() > 1) { stackkk.pop(); mPager.setCurrentItem(stackkk.lastElement()); } else { //do wat you want } } 

Надеюсь, это поможет

Intereting Posts
Android: как получить намерение, полученное службой? Открытие защищенного PDF-документа PDF и рендеринга в android с использованием нового класса «PdfRenderer»? Сделайте волновое красное подчеркивание для некоторых слов в edittext Java.lang.StackOverflowError на android.support.v7.widget.GridLayout $ Axis $ 1.walk (GridLayout.java:1315) Написать в разрешении файла в android Обфускация в Android Studio Ошибка приложения при запуске Proguard на GSON (который использует перечисление) Изменение оттенка рисования в селекторе xml Есть ли способ установить DEBUG для всех тегов в ADB Android? Выполнение не выполнено для задачи ': app: compileDebugKotlin' Android – Как сохранить файл, который можно прочитать другим приложением? Как выполнить веб-запрос в своем потоке? Версия для Android в формате PDF для api Ошибка приложения при запуске из-за java.lang.IllegalArgumentException: column '_id' не существует Android: несколько таймеров в ListView с обработчиком и runnable. 2 Проблемы