पर यह मुझे पागलपन के कगार पर ले जा रहा है!"android.util.AndroidRuntimeException: requestFeature() को सामग्री जोड़ने से पहले कॉल किया जाना चाहिए" showDialog (dialogId)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myLayout);
mMyButton = (Button) findViewById(R.id.myButtonId);
mMyButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(ID_MYDIALOG);
}
});
}
मैं अपनी संवाद बिल्डर वर्ग (एक सिंगलटन) में लिखा है के बाद से मैं कई अन्य गतिविधि की राशि अपने आवेदन में:
मैं एक गतिविधि है, जहां मैं एक onClickListener के साथ एक बटन दृश्य प्रारंभ, इसलिए की तरह है जो दिया गतिविधि के लिए onCreateDialog(int id)
समारोह में, संवाद के एक सामान्य सेट का उपयोग किया जाएगा, इसलिए मैं फोन:
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch (id) {
case ID_MYDIALOG:
dialog = DialogBuilder.getInstance().getMyDialog(this, mUri, mListener);
break;
default:
dialog = null;
break;
}
return dialog;
}
mUri
और mListener
चर कहीं परिभाषित कर रहे हैं और मुझे लगता है कि वें सत्यापित किया है आईपी वैध हैं। सिंगलटन DialogBuilder
वर्ग के प्रासंगिक भागों इस तरह दिखता है:,
public AlertDialog getMyDialog(Context context, Uri uri, DialogInterface.OnClickListener listener) {
// Inflate the custom body for the AlertDialog.
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.myDialogBody, null);
// Get the data to show in the dialog.
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
// Create a suitable data adapter and use it to populate the dialog body with data.
MyDialogDataAdapter adapter = new MyDialogDataAdapter(context, cursor);
// Populate the GridView in the dialog body with data.
GridView grid = (GridView) view.findViewById(R.id.myDialogDataGrid);
grid.setAdapter(adapter);
return new AlertDialog.Builder(context)
.setIcon(R.drawable.myDialogIcon)
.setTitle(R.string.myDialogTitle)
.setView(view)
.setPositiveButton(R.string.myDialogDone, listener)
.create();
}
अब जब मैं अपने आवेदन चलाने के लिए और बटन को टैप करें (यानी mMyButton
) मैं निम्न अपवाद स्टैक ट्रेस मिलती है:
E/AndroidRuntime(1247): FATAL EXCEPTION: main
E/AndroidRuntime(1247): android.util.AndroidRuntimeException: requestFeature() must be called before adding content
E/AndroidRuntime(1247): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181)
E/AndroidRuntime(1247): at com.android.internal.app.AlertController.installContent(AlertController.java:203)
E/AndroidRuntime(1247): at android.app.AlertDialog.onCreate(AlertDialog.java:251)
E/AndroidRuntime(1247): at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
E/AndroidRuntime(1247): at android.app.Activity.createDialog(Activity.java:886)
E/AndroidRuntime(1247): at android.app.Activity.showDialog(Activity.java:2557)
E/AndroidRuntime(1247): at android.app.Activity.showDialog(Activity.java:2524)
E/AndroidRuntime(1247): at com.dbm.myApp.myActivity$4.onClick(myActivity.java:266)
E/AndroidRuntime(1247): at android.view.View.performClick(View.java:2534)
E/AndroidRuntime(1247): at android.view.View$PerformClick.run(View.java:9210)
E/AndroidRuntime(1247): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(1247): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(1247): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(1247): at android.app.ActivityThread.main(ActivityThread.java:3652)
E/AndroidRuntime(1247): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1247): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(1247): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(1247): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(1247): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 212): Force finishing activity com.dbm.myApp/.myActivity
हैं मैं स्टैक ट्रेस को सही ढंग से समझता हूं कि जिस बिंदु पर मैं अपना बटन टैप करता हूं, उस मुद्दे को ट्रिगर किया जाता है (com.dbm.myApp.myActivity$4.onClick(myActivity.java:266)
के अनुसार जो सटीक showDialog(ID_MYDIALOG);
लाइन है)।
साथी एंड्रॉइड डेवलपर्स का क्या कहना है? आप क्या सोचते हैं जो मेरी समस्या पैदा कर रहा है?
यह मानना उचित है कि उपरोक्त कोड संकलन और इकाई परीक्षण आदि के अनुसार मान्य है। दिए गए कोड को, हालांकि, फोरम फिट करने के लिए सरलीकृत और छीन लिया गया है, इसलिए कृपया टिप्पणी करने का प्रयास न करें नामकरण सम्मेलन आदि
मैंने अब सिंगलटन 'डायलॉगबिल्डर' वर्ग में 'getMyDialog' फ़ंक्शन में सब कुछ टिप्पणी करने के लिए परीक्षण किया है और एक ही समस्या बनी हुई है। मुझे लगता है कि मेरी गतिविधि ठीक से शुरू नहीं हुई है। – dbm
मैं इस पर आया हूं लेकिन मुझे सटीक फ़िक्स याद नहीं है :-(क्या आपको कॉल करने की आवश्यकता है: 'requestWindowFeature (Window.FEATURE_CUSTOM_TITLE);' अपने डायलॉगबिल्डर वर्ग में? – Blundell
एक अच्छी टिप, मैंने अभी इसका परीक्षण किया, लेकिन दुर्भाग्य से यह मुद्दा बनी हुई है। इसके अलावा मुझे अनुरोध फीचर() फ़ंक्शन (या शॉर्ट-कट संस्करण: requestWindowFeature()) पर थोड़ा सा पढ़ना पड़ सकता है और वे वास्तव में मेरे एप्लिकेशन के साथ क्या करते हैं। – dbm