バックボタンを押したとき、ネストしたFragmentをバックスタックする方法

FragmentからFragmentを呼ぶ(いわゆるNested Fragment)場合、バックボタンを押したとき、一個前のFragmentに戻したいときがあります。
stackoverflowでいいものを見つけたので、備忘録としてメモしておきます。
Android 4.2: back stack behaviour with nested fragments - Stack Overflow

Fragment呼び出し時

当たり前のことなのですが、Fragment呼び出し時は後で復元できるようにaddToBackStackを呼んでスタック*1に追加しておきます。

	@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();
	}

バックボタンを押したときの処理

以下のようにしてNetsted Fragmentのスタックが存在する場合は、popBackStackを呼んで1つ前の状態の戻しします。

	@Override
	public void onBackPressed() {
	    // if there is a fragment and the back stack of this fragment is not empty,
	    // then emulate 'onBackPressed' behaviour, because in default, it is not working
	    FragmentManager fm = getSupportFragmentManager();
	    for (Fragment frag : fm.getFragments()) {
	        if (frag.isVisible()) {
	            FragmentManager childFm = frag.getChildFragmentManager();
	            if (childFm.getBackStackEntryCount() > 0) {
	                childFm.popBackStack();
	                return;
	            }
	        }
	    }
	    super.onBackPressed();
	}

statckoverflowに感謝、感謝です。

*1:正式な用語はトランザクションというようです