2017-06-30 5 views
0

私はダイアログを作成し、値を取得するためのコーディングがあります。それは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)

+0

問題が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)の –

+0

driverUpdateStatus.viewを割り当てた理由は何ですか? –

+0

アラートダイアログにカスタムビューを追加しますか? –

答えて

2
​​

常に新しいビューを使用するか、使用時に親から削除してください。

0

あなたが.setView(this.view)

関連する問題