Ich versuche, die Positionen der beiden Fragmente durch Klicken auf die Schaltfläche zu vertauschen. Zuerst füge ich FrameLayout in meine XML-Datei ein.java.lang.IllegalStateException: Container-ID des Fragments kann nicht geändert werden
<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" />
Und dann die Fragmente hinzufügen, wenn 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();
Aber das kleine Fragment wurde nicht gezeigt worden! Ich habe versucht, Position zwei Fragmente zu tauschen, aber die Kleinen scheinen immer noch nicht. Und wenn ich versuche, ihre Position zu ändern, indem Sie auf eine Schaltfläche klicken sie angezeigt werden:
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)
Hier ist mein Code, wenn klicken:
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();
Es scheint
Fügen manager.executePendingTransactions() zu tun, bevor das Fragment zum zweiten Mal hinzugefügt wird. – Isuru
Es funktioniert nicht für mich Wenn Sie MapFragment oder CameraPreviewFragment zum big_fragment hinzufügen, werden alle angezeigt, aber wenn add in content_frame_small nicht alle erscheinen –