ListFragmentからFragmentを表示する方法

ListFragmentのリスト選択時、詳細な情報を別Fragmentで表示したいときがあります。
試行錯誤しながら、なんとか実現できたので備忘録として残しておきます。

ラッパー用のFragmentを容易し、その中にListFragment、およびFragmentを表示する方法になります。
ラッパー用のlayoutファイルfragment_wrapper.xmlは以下のようになります。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <FrameLayout 
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>


ラッパー用のFragmentは以下のようにします。
リスト選択時、getChildFragmentManagerで詳細画面用のFragmentに置き換えます。

public class WrapperFragment extends Fragment {
	
	public static WrapperFragment newInstance(int position){
		WrapperFragment fragment = new WrapperFragment();
		Bundle bundle = new Bundle();
		bundle.putInt("position", position);
		return fragment;
	}
	
	@Override
	public void onCreate(Bundle savedInstanceState){
		logger.put(android.util.Log.INFO,TAG,"onCreate");
		super.onCreate(savedInstanceState);
		
		DataListFragment list = DataListFragment.newInstance(1,new DataListListener(){
			@Override
			public void onSwitchToNextFragment(){
				DetailFragment fragment = DetailFragment.newInstance(1);
				getChildFragmentManager().beginTransaction()
					.replace(R.id.container, fragment)
					.addToBackStack(null)
					.commit();
			}
		});
		getChildFragmentManager().beginTransaction()
			.add(R.id.container, list)
			.commit();
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
		logger.put(android.util.Log.INFO,TAG,"onCreateView");
		View view = inflater.inflate(R.layout.fragment_wrapper, container, false);
		return view;
	}

DataListFragmentは以下のとおりになります。

	@Override
	public void onListItemClick(ListView l, View v, int position, long id){
        ...省略...
          if(mListener != null) {
            mListener.onSwitchToNextFragment();
          }		
	}

解決するのに時間がかかりました。疲れた。