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

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

Я создавал код на основе этого учебникаи этого SO-вопроса. В этом вопросе используется 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 );
                }
            }
        }
    } );

6
задан Community 23 May 2017 в 12:16
поделиться