来自摄像机的Android失去了片段视图

来自摄像机的Android失去了片段视图,android,android-fragments,view,fragmenttransaction,Android,Android Fragments,View,Fragmenttransaction,我已经实现了一个公式,它有一些步骤。每个步骤都使用一个框架布局在一个新的片段中 在最后一步(片段A)中有一个按钮。单击此按钮时,将启动一个新的片段(片段B),并启动相机意图 有时在拍摄照片并关闭相机后,会显示片段A,而不是片段B。发生这种情况时,UI元素将被冻结,任何字段都是可编辑的,继续使用应用程序的唯一方法是关闭表单,然后再次启动流程 我认为这是一个OOM错误,因此活动被终止/恢复,最后一个状态没有正确存储 我已经尝试过检查,但是没有调用方法onRestoreInstanceState()。

我已经实现了一个公式,它有一些步骤。每个步骤都使用一个
框架布局
在一个新的
片段

在最后一步(
片段A
)中有一个
按钮
。单击此
按钮
时,将启动一个新的
片段
片段B
),并启动相机
意图

有时在拍摄照片并关闭相机后,会显示
片段A
,而不是
片段B
。发生这种情况时,
UI
元素将被冻结,任何字段都是可编辑的,继续使用应用程序的唯一方法是关闭
表单
,然后再次启动流程

我认为这是一个
OOM
错误,因此
活动
被终止/恢复,最后一个状态没有正确存储

我已经尝试过检查,但是没有调用方法
onRestoreInstanceState()
。此外,无论是否显示摄影机,都会在摄影机关闭后调用
片段B
中的方法。这是我用来打开
片段B
和相机的代码:

碱基片段

private void setCurrentFragment(int pos, boolean animate) {
   showFragment(buildFragment(mCurrentPage), animate, animationFromRight);
   ....
}

private Fragment buildFragment(int pos) {
    switch (mHasFamilyManager ? pos : pos + 1) {
        ............
        case 3:
            mCurrentFragment = PhotoVerificationFragment.newInstance();
            if (mState.getAttachments().isEmpty()) {
                switch (mState.getPictureSelector()) {
                    .....
                    case CAMERA:
                        onAddCameraPictureClicked();
                        break;
                }
             .....

    return mCurrentFragment;
}

private void showFragment(final Fragment fragment, boolean animate,
        final boolean animationFromRight) {
    if (fragment != null) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (animate) {
            if (animationFromRight) {
                transaction.setCustomAnimations(R.anim.activity_slide_in_right,
                        R.anim.activity_slide_out_left);
            } else {
                transaction.setCustomAnimations(R.anim.activity_slide_in_left,
                        R.anim.activity_slide_out_right);
            }
        }
        transaction.addToBackStack(null);
        transaction.replace(R.id.container, fragment);
        transaction.commit();
    }
}
main活动

public void onAddCameraPictureClicked() {
    startActivityForResult(takePictureIntent, requestCode);
    .....
}
有人有主意吗?提前谢谢

请尝试以下操作:

transaction.add(R.id.container, fragment);
transaction.disallowAddToBackStack();
transaction.commit();
通过使用
replace
您正在替换彼此之上的片段,因此它不会删除以前的片段,或者在当前片段的下面添加新片段

使用
add
可以确保它始终位于顶部

disallowedtobackstack
将确保堆栈中没有任何内容