Подтвердить что ты не робот

У указанного ребенка уже есть родитель. Сначала вы должны вызвать removeView() для родительского родителя

У меня есть класс для создания диалога и кодирования для получения значений из него. он отлично работает для одного. и когда я пытаюсь вызвать диалог во второй раз, он передает следующее сообщение об ошибке.

: java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() для родительского родителя.

Не могли бы вы рассказать мне, как удалить removeView()?

вот код для класса;

    package com.util;

import android.app.AlertDialog;  
import android.content.Context;  
import android.content.DialogInterface;  
import android.content.DialogInterface.OnClickListener;  
import android.widget.EditText;  

/** 
 * helper for Prompt-Dialog creation 
 */  
public abstract class PromptDialog extends AlertDialog.Builder implements OnClickListener {  
 private final EditText input;  

 /** 
  * @param context 
  * @param title resource id 
  * @param message resource id 
  */  
 public PromptDialog(Context context, int title, int message) {  
  super(context);  
  setTitle(title);
  //:TODO Display msg only if not empty
  //setMessage(message);  

  input = new EditText(context);  
  setView(input);  

  setPositiveButton("ok", this);  
  setNegativeButton("cancel", this);  
 }  

 /** 
  * will be called when "cancel" pressed. 
  * closes the dialog. 
  * can be overridden. 
  * @param dialog 
  */  
 public void onCancelClicked(DialogInterface dialog) {  
  dialog.dismiss();  
 }  

 @Override  
 public void onClick(DialogInterface dialog, int which) {  
  if (which == DialogInterface.BUTTON_POSITIVE) {  
   if (onOkClicked(input.getText().toString())) {  
    dialog.dismiss();  
   }  
  } else {  
   onCancelClicked(dialog);  
  }  
 }  

 /** 

      * called when "ok" pressed. 
      * @param input 
      * @return true, if the dialog should be closed. false, if not. 
      */  
     abstract public boolean onOkClicked(String input);  
    }  

и вот код, который я называю экземпляром класса;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);



final PromptDialog dlgName = new PromptDialog(this, R.string.enterName, R.string.enter_comment) {  
             @Override  
             public boolean onOkClicked(String input) {  
              // do something 
              mName = input;
                  save();
                          //end do some thing
              return true; // true = close dialog  
             }  
        };      


    mTxtShiftName = (TextView) findViewById(R.id.shiftname);
            mTxtShiftName.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                dlgName.show();
            }   
        });
4b9b3361

Ответ 1

Я получил эту ошибку от вызова неправильного метода вздутия в моем вызове onCreateView().

Я исправил это, изменив это:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_saves, container);
}

Для этого:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_saves, container, false);
}

Ответ 2

Вы должны поместить код, вызывающий конструктор диалога, внутри метода обратного вызова onCreateDialog(int) вместо onCreate(Bundle). В вашем коде диалоговое окно инициализируется неявно, когда вы вызываете dlgName.show(). В результате, когда вы вызываете диалог во второй раз, так и с конструктором диалога.

Ответ 3

Проверьте это:

http://developer.android.com/reference/android/view/LayoutInflater.html#inflate (int, android.view.ViewGroup, boolean)

В частности, логический аргумент и возвращаемое значение в методе раздувания LayoutInflator:

Возвращает   Корневой вид завышенной иерархии.   Если root был предоставлен, а attachToRoot - true, это root;   в противном случае это корень завышенного XML файла.

View dialogView = inflater.inflate(R.layout.brush_opts_dialog, rootView, false);

Вы хотите, чтобы зарождаемый корень представления представлял собой созданный вид, а не "this", который был бы целым фрагментом внутри действия.