来自摄像机的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
将确保堆栈中没有任何内容