我嘗試通過單擊按鈕來交換兩個分段的位置。 首先,我在我的xml文件中添加了兩個FrameLayout。java.lang.IllegalStateException:無法更改分段的容器ID
<FrameLayout
android:id="@+id/content_frame_small"
android:layout_width="120dp"
android:layout_height="200dp"
android:layout_marginTop="50dp"
android:layout_alignParentRight="true"
android:clickable="true"
android:rotation="90" />
<FrameLayout
android:id="@+id/big_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
然後添加片段時initView
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
findViewById(R.id.content_frame_small).bringToFront();
if (mapFragment == null) {
mapFragment = new MapFragment();
}
ft.addToBackStack(MapFragment.TAG);
ft.add(R.id.content_frame_small, mapFragment, MapFragment.TAG);
if (cameraPreviewFragment == null) {
cameraPreviewFragment = new CameraPreviewFragment();
}
ft.addToBackStack(CameraPreviewFragment.TAG);
ft.add(R.id.big_fragment, cameraPreviewFragment, CameraPreviewFragment.TAG);
ft.commitAllowingStateLoss();
但是小片段並沒有被證明!我試圖交換兩個片段的位置,但小的還沒有出現。當我試圖改變自己的位置通過點擊一個按鈕,它出現:
java.lang.IllegalStateException: Can't change container ID of fragment MapFragment{43138b40 #0 id=0x7f110098 MapFragment}: was 2131820696 now 2131820697
at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:406)
at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:375)
at com.locision.ogipssampler.activity.CameraRecordActivity.onClick(CameraRecordActivity.java:321)
at android.view.View.performClick(View.java:4444)
at android.view.View$PerformClick.run(View.java:18457)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5049)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
這裏是我的代碼,當點擊:
isShowMap = !isShowMap;
FragmentTransaction ft =
getSupportFragmentManager().beginTransaction();
if (mapFragment.isAdded()) {
ft.remove(mapFragment);
}
if (cameraPreviewFragment.isAdded()) {
ft.remove(cameraPreviewFragment);
}
ft.commitAllowingStateLoss();
getSupportFragmentManager().executePendingTransactions();
ft = getSupportFragmentManager().beginTransaction();
if (isShowMap) {
mapFragment.showLogo();
ft.add(R.id.big_fragment, mapFragment, MapFragment.TAG);
ft.add(R.id.content_frame_small, cameraPreviewFragment,
CameraPreviewFragment.TAG);
} else {
mapFragment.disapperLogo();
ft.add(R.id.big_fragment, cameraPreviewFragment, CameraPreviewFragment.TAG);
ft.add(R.id.content_frame_small, mapFragment, MapFragment.TAG);
cameraPreviewFragment.loadView(cameraManager)
}
ft.commitAllowingStateLoss();
看來
包括manager.executePendingTransactions()。 – Isuru
它不適用於我當將MapFragment或CameraPreviewFragment添加到big_fragment時,所有這些都顯示出來,但是當添加content_frame_small時,它們都沒有出現 –