如何取消FragmentTransaction提交

时间:2015-10-28 12:26:27

标签: android fragment fragmenttransaction

我必须为用户提供在我的应用中捕获视频的选项,但我不希望在视频未录制时出现预览(或占用空间)。

因此,我根据camera2video google示例使用FragmentTransaction构建浮动预览。

我的班级变量是:

FragmentTransaction fm = null;
Camera2VideoFragment camera2VideoFragment;

我创建了一个实例并用OnCreate方法初始化了相机:

camera2VideoFragment = Camera2VideoFragment.newInstance();
if (null == savedInstanceState) {
    fm = getFragmentManager().beginTransaction()
            .replace(R.id.container, camera2VideoFragment);
}

我想使用菜单方法(onOptionsItemSelected)来隐藏和隐藏预览(片段):

case R.id.action_captureScreen:
    item.setChecked(!item.isChecked());
    if (item.isChecked())
    {
        fm.commit(); // show the preview - working
        // camera2VideoFragment.captureVideo();  // start capture video
    }
    else
    {
        //camera2VideoFragment.captureVideo();  // stop the video and save to file
        fm.detach(camera2VideoFragment);        // hide the preview - NOT WORKING
    }

我也试过fm.hide(camera2VideoFragment),但它也不行。

所以,问题是如何隐藏\显示预览? 谢谢!

1 个答案:

答案 0 :(得分:2)

你混淆了一些条款。 交易仅执行"提交之后由片段系统提供。在致电commit()之前没有任何事情发生。

所以你已经执行了两个不同的交易,一个用于显示,另一个用于隐藏。

显示:

getFragmentManager().beginTransaction().show(camera2VideoFragment).commit();

隐藏:

getFragmentManager().beginTransaction().hide(camera2VideoFragment).commit();