“android.util.AndroidRuntimeException: requestFeature() muss aufgerufen werden, bevor das hinzufügen von Inhalt" auf showDialog(dialogId)
Dieser ist treibt mich an den Rand des Wahnsinns!
Ich habe eine Tätigkeit, wo ich initialisiert eine Button-Ansicht mit einem onClickListener, etwa so:
@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);
}
});
}
Habe ich auch geschrieben, meine eigene dialog-generator-Klasse (singleton), da ich mehrere andere Aktivität ist in meiner Anwendung, die einen gemeinsamen Satz von Dialogen, also in der onCreateDialog(int id)
Funktion für die gegebene Aktivität, die ich nenne:
@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;
}
Den mUri
und mListener
Variablen definiert an anderer Stelle, und ich habe überprüft, ob Sie gültig sind. Die relevanten Teile des singleton - DialogBuilder
- Klasse sieht wie folgt aus:
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();
}
Nun, wenn ich meine Anwendung und Tippen Sie auf die Schaltfläche (d.h. mMyButton
) bekomme ich folgende exception stack trace:
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
Wenn ich interpretieren die stack-trace-korrekt, das Problem ist der Auslöser der moment, in dem ich auf meine Schaltfläche (wie von com.dbm.myApp.myActivity$4.onClick(myActivity.java:266)
was ist der genaue showDialog(ID_MYDIALOG);
Linie).
Was tun Sie, Kolleginnen und Android-Entwickler sagen? Das, was du Sie denken verursacht mein problem?
Es ist fair, anzunehmen, dass der obige code Valide ist, nach der Kompilierung und unit-tests usw.. Den angegebenen code aus, ist jedoch vereinfacht und entfernt werden, um zu passen das forum, daher, bitte setzen Sie nicht eine Anstrengung, um zu kommentieren die Namenskonventionen, etc.
- Ich habe über diesen, aber ich kann mich nicht erinnern, die genauen fix 🙁 brauchen Sie, um zu rufen:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
In Ihrem DialogBuilder Klasse? - Ein guter Tipp, habe es gerade getestet, aber leider das Problem weiterhin. Auch ich hätte zu Lesen, ein bisschen auf der requestFeature () - Funktion (oder der short-cut-version: requestWindowFeature()) und das, was Sie wirklich tun, um meine Anwendung.
- Ich habe es nun getestet, kommentieren Sie alles, was in der
getMyDialog
Funktion in der singleton -DialogBuilder
Klasse und das gleiche Problem bleibt. Ich fange an zu denken, dass meine Tätigkeit nicht ordnungsgemäß initialisiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube ich habe das Problem gelöst: Wenn ich aus irgendeinem Grund schaffen die AlertDialog mit:
I. e. mit
.show();
statt.create();
Das Problem ist nicht mehr vorhanden. Ich weiß nicht, warum das funktioniert, oder was unterscheidet denAlertDialog.Builder::show()
Funktion aus derAlertDialog.Builder::create();
Funktion (mehr als der offensichtliche Unterschied spiegelt sich in der jeweiligen Funktion Namen).Versuche zu nennen, die
.setView(view)
direkt nach Konstruktor.Hilft es?
Kann es nicht die Lösung..aber ich war ein bisschen überrascht von diesem Stück:
Ich dachte, Sie implementieren sollten onClick innerhalb der listener? bin ich falsch?
onClick
- Funktion). Ich war ein bisschen zu eifrig auf meine Frage, obwohl (sorry für das).