Android - 在ViewPager中替换片段时的Backstack

Ser*_*his 6 android android-fragments android-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;
}
Run Code Online (Sandbox Code Playgroud)

和该List的片段的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 );
                }
            }
        }
    } );
Run Code Online (Sandbox Code Playgroud)

Bla*_*hex 2

查看我对上述问题的新答案:https ://stackoverflow.com/a/11974777/685292

您可以看到一个示例,说明如何自行使用ViewPager实现简单的后退堆栈,因为addToBackStack(null)不适用于ViewPager片段。另请注意,您的问题的主要问题可能是缺少getItemId(intposition)重写方法。