पर removeView() को कॉल करना होगा, मुझे पता है कि इस त्रुटि के बारे में पूछे जाने वाले दर्जनों प्रश्न हैं, लेकिन प्रस्तावित समाधानों में से कोई भी मेरी समस्या पर लागू नहीं होता है, कम से कम मैं देखता हूं।एंड्रॉइड - निर्दिष्ट बच्चे के पास पहले से ही एक अभिभावक है। आपको बच्चे के माता-पिता को पहले
यहाँ मेरी लॉग है:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1851)
at com.android.internal.app.AlertController.setupView(AlertController.java:365)
at com.android.internal.app.AlertController.installContent(AlertController.java:206)
at android.app.AlertDialog.onCreate(AlertDialog.java:251)
at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
at android.app.Dialog.show(Dialog.java:225)
at com.company.MyApp.MyActivity$7.onItemClick(MyActivity.java:240)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
यहाँ MyActivity.java onCreate है()। आप देख सकते हैं कि एक संवाद निर्माता दिखाया गया है और कुछ मान दिए गए हैं। दोनों myDialogLayout
और myDialogBuilder
निजी वर्ग के सदस्यों
@Override
public void onCreate(Bundle savedInstanceState)
{
// ... a bunch of init code...
// Create a dialog builder
myDialogLayout = getLayoutInflater().inflate(R.layout.leaving, null);
myDialogBuilder = new AlertDialog.Builder(this)
.setTitle("My Title")
.setView(myDialogLayout)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {}
});
// ... more code ...
}
बाद में, जब एक निश्चित बटन मेरे गतिविधि में क्लिक किया जाता है, myDialogBuilder
थोड़ा अनुकूलित है और फिर एक संवाद बनाया है और दिखाया गया है कर रहे हैं।
// Builder customized a bit
myDialogBuilder
.setMessage("custom message here");
// Dialog created from Builder
myDialog = myDialogBuilder.create();
// Dialog shown
myDialog.show(); // <---- MyActivity.java Line: 240
तो मेरी समस्या पर, जब मैं अपने बटन क्लिक करें, संवाद सफलतापूर्वक बनाया गया है: myDialog
एक निजी वर्ग चर/सदस्य है। लेकिन जब मैं संवाद पर रद्द करता हूं और फिर बटन दबाता हूं, तो मुझे लॉग में दिखाई देने वाली त्रुटि मिलती है। किसी कारण से, गतिविधि मुझे अपने myDialog
संवाद का पुन: उपयोग नहीं करना चाहती है। यह एक वर्ग सदस्य है, इसलिए यह onClick
हैंडलर से पहुंच योग्य है। और myDialog
हर बार बटन क्लिक होने पर एक नया संवाद होता है, क्योंकि यह हर बार myDialogBuilder.create()
द्वारा स्क्रैच से बनाया गया है।
कोई भी जानता है कि समस्या क्या है? जब मैंने रद्द बटन दबाया था तो मैंने myDialog.dismiss()
में जोड़ने का भी प्रयास किया लेकिन इससे कोई फर्क नहीं पड़ता।
इसके अलावा, आप मेरे myDialogBuilder
में देख सकते हैं कि संवाद के दृश्य के लिए एक कस्टम एक्सएमएल लेआउट का उपयोग किया जाता है। त्रुटि संदेश के अनुसार, ऐसा लगता है कि यह संवाद में उपयोग किए जाने से दृश्य को हटाने के लिए मुझे removeView()
का उपयोग करना चाहता है। लेकिन myDialogBuilder.removeView()
मान्य विधि नहीं है।
वह कुंजी थी।मैंने 'myDialogLayout' को क्लास सदस्य चर होने से हटा दिया और इसके बजाय इसे' ऑनक्लिक 'हैंडलर विधि में स्थानीय बना दिया। इस तरह यह एक नया लेआउट है जो हर बार फुलाया जाता है। धन्यवाद! –