私はダイアログを作成し、値を取得するためのコーディングがあります。それは1つのために正常に動作します。私が2回目にダイアログを呼び出そうとすると、次のエラーメッセージが表示されます。指定した子にはすでに親があります。あなたはremoveView()を呼び出さなければなりません
public class DriverUpdateStatus extends DialogFragment {
private static DriverUpdateStatus driverUpdateStatus;
private Context context;
private View view;
public static DriverUpdateStatus newInstance(Context context) {
if (driverUpdateStatus == null) {
driverUpdateStatus = new DriverUpdateStatus();
driverUpdateStatus.view = LayoutInflater.from(context).inflate(R.layout.dialog_driver_update_status, null);
}
driverUpdateStatus.context = context;
return driverUpdateStatus;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(context)
.setTitle("SELECT_STATE")
.setView(this.view)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.create();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageButton
android:id="@+id/im_off_duty"
android:layout_width="100dp"
android:layout_height="100dp"
android:backgroundTint="@color/cardview_light_background"
android:src="@drawable/ic_power_settings_new_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Off Duty" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageButton
android:id="@+id/im_on_duty"
android:layout_width="100dp"
android:layout_height="100dp"
android:backgroundTint="@color/cardview_light_background"
android:src="@drawable/ic_check_circle_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="On Duty" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageButton
android:id="@+id/im_sleeper"
android:layout_width="100dp"
android:layout_height="100dp"
android:backgroundTint="@color/cardview_light_background"
android:src="@drawable/ic_airline_seat_individual_suite_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Sleeper" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageButton
android:id="@+id/im_driving"
android:layout_width="100dp"
android:layout_height="100dp"
android:backgroundTint="@color/cardview_light_background"
android:src="@drawable/ic_do_not_disturb_on_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Driving" />
</LinearLayout>
</LinearLayout>
プロセス:com.jackfruitsystems.fleetoperate、PID:4759 java.lang.IllegalStateException:指定された子はすでに 親を持っています。子の親で最初にremoveView()を呼び出す必要があります。 android.view.ViewGroup.addViewでandroid.view.ViewGroup.addView(ViewGroup.java:4146) でandroid.view.ViewGroup.addViewInner(ViewGroup.java:4310) (ViewGroup.java:4118) でで com.android.internal.app.AlertController.setupCustomContent(AlertController.java:585) でcom.android.internal.app.AlertController.setupView(AlertController.java:496) com.android.internal.appで.AlertController.installContent(AlertController.java:234) android.app.AlertDialog.onCreate(AlertDialog.java:423) atとroid.app.Dialog.dispatchOnCreate(Dialog.java:394)android.app.Dialog.show(Dialog.java:295)で android.app.DialogFragment.onStart(DialogFragment.java:499)で アンドロイドで 。 app.Fragment.performStart(Fragment.java:2244) でandroid.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002) でandroid.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)アンドロイドで 。 app.BackStackRecord.run(BackStackRecord.java:793) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) android.app.FragmentManagerImpl $ 1.run(FragmentManager.java:482) android.os.Handler.handleCallback(Handler.java:739) (android.os.Handler.dispatchMessage(Handler.java:95) at) android.os.Looper.loop(Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com。 android.internal.os.ZygoteInit $ MethodAndArgsCaller.run com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)で(ZygoteInit.java:726)
問題がCOMでアラートcontrollercom.android.internal.app.AlertController.setupCustomContent(AlertController.java:585)の「AlertController」共有スニペットである。このラインで再度レイアウトに存在していたビューを置きます.android.internal.app.AlertController.setupView(AlertController.java:496)com.android.internal.app.AlertController.installContent(AlertController.java:234)の –
driverUpdateStatus.viewを割り当てた理由は何ですか? –
アラートダイアログにカスタムビューを追加しますか? –