2012-02-11 11 views
18

पर 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(); 
      } 
     }); 
+0

क्या आप अपने दूसरे प्रयास पर फिर से संवाद निर्माता को बुला रहे हैं? –

+0

मैं जो कोडिंग कर रहा हूं वह मेरे प्रश्न में कॉपी किया गया है। मुझे लगता है कि कारण हो सकता है। लेकिन मुझे नहीं पता कि इससे कैसे बचें? – SAN

+0

जब आप बटन पर क्लिक करते हैं तो कन्स्ट्रक्टर को दो बार कॉल न करें। अपने डायलॉग कन्स्ट्रक्टर या 'ऑनपेयर डेलॉग' के साथ सिर्फ कोड के साथ 'ऑनक्रेट' में अपना संवाद बनाएं, फिर जब आप इसे दिखाना चाहते हैं तो संवाद.शो() को कॉल करें। –

उत्तर

1

आप onCreate(Bundle) के बजाय onCreateDialog(int) कॉलबैक विधि के अंदर संवाद निर्माता बुला कोड डालना चाहिए। आपके कोड में, जब आप dlgName.show() पर कॉल करते हैं तो संवाद को तत्काल प्रारंभ किया जाता है। नतीजतन, जब आप दूसरी बार संवाद कहते हैं, तो यह संवाद निर्माता के साथ है।

66

मुझे यह त्रुटि मेरे खंड के ऑनक्रेट व्यू() कॉल में गलत inflate विधि को कॉल करने से मिली है।

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

अंतिम तर्क के रूप में झूठ दोस्त ने मेरे जीवन को बचाया! धन्यवाद! –

+0

उस आदमी को पदक दें! धन्यवाद दोस्त – Karoly

0

इस चेक आउट::

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

विशेष रूप से, बूलियन तर्क और वापसी मूल्य

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_saves, container); 
} 
इस के लिए

:

मैं इस से बदलकर तय लेआउट इन्फ्लूटर की inflate विधि में:

रिटर्न फुले हुए पदानुक्रम का मूल दृश्य। यदि रूट की आपूर्ति की गई थी और संलग्न है तो रूट सही है, यह रूट है; अन्यथा यह फुर्ती हुई XML फ़ाइल की जड़ है।

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

आप के बजाय "यह" बनाए गए दृश्य होने के लिए फुलाया देखने के रूट बनाने के लिए है, जो किसी गतिविधि में पूरे टुकड़ा होगा चाहते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे