3 つのビューを含む ViewPager を作成しています。最初のビューは ListView で、onItemClick はそのフラグメントの新しいフラグメントをその中の WebView に置き換えます。「transaction.addToBackStack(null)」または「transaction.setCustomAnimations(...)」を追加すると、WebView のフラグメントが表示されなくなります。これらの行がないと表示されますが、BACKボタンでリストに戻ることはできません。
そのチュートリアルとこの SO questionに基づいてコードを作成していました。その質問では PagerAdapter が使用されており、私は FragmentPagerAdapter を使用しています。また、これ以上フラグメントを置き換える必要はありません。これは 1 回だけです (リストから 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 );
}
}
}
} );