Problem: Anwendung abstürzt mit StackOverflowError
Anwendung stürzt manchmal nach Sprachressourcenwechsel
ViewRoot.draw(boolean) line: 1374
ViewRoot.performTraversals() line: 1114
ViewRoot.handleMessage(Message) line: 1633
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
habe ich eine TabActivity
mit einigen Registerkarten. Ich füge Registerkarten wie folgt aus:
intent = new Intent().setClass(this, SigninActivity.class);
spec = tabHost.newTabSpec("Signin").setIndicator("CV", res.getDrawable(R.drawable.ic_tab_signin)).setContent(intent);
tabHost.addTab(spec);
Im Reiter habe ich auf Klick zeigen, dass ich ein Pop-up mit zwei Tasten aus Android popup window dismissal Wenn einige Schaltfläche in Popup auf klicken, wechselt die Sprache wie folgt aus:
Locale mLocale = new Locale("ar");
Locale.setDefault(mLocale);
Configuration config = getBaseContext().getResources().getConfiguration();
if (!config.locale.equals(mLocale)) {
config.locale = mLocale;
getBaseContext().getResources().updateConfiguration(config, null);
replaceContentView("Signin", new Intent(NewAccActivity.this, NewAccActivity.class));
}
Und wenn ich 6-7 Mal in einer Registerkarte klicken, um die Sprache (Layout und Werte) zu ändern, stürzt die Anwendung mit NullPointer
auf Methode (PopupWindow)this.window.dismiss()
in Popup.
Ich habe einen Timer für den Aufruf dismiss()
hinzugefügt, aber jetzt stürzt Anwendung mit StackOverflowError
nach 6-7 Sprachänderungen ab.
Wo ist das Problem?
Upd: Ich entferne Timer. Im Popup-Bildschirm haben alle Tasten einen OnClickListener
.
In Aktivität:
Button btnDialogShow = (Button) findViewById(R.id.button);
btnDialogShow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dw = new LanguageChangeDialog(v, getBaseContext());
dw.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
switch (b.getId()) {
case R.id.en:
cvitchToEn();
break;
case R.id.ar:
cvitchToAr();
break;
}
}
});
dw.showLikePopDownMenu();
}
});
Wenn es so aussieht, this.onClickListener externe clicklistener in Aktivität Hexe ändern locale waren:
public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void onClick(final View v) {
onClickListener.onClick(v);
dismiss();
}
Nach Klick Ich habe Ausnahme:
Thread [<3> main] (Suspended (exception NullPointerException))
PopupWindow$1.onScrollChanged() line: 124
ViewTreeObserver.dispatchOnScrollChanged() line: 607
ViewRoot.draw(boolean) line: 1195
ViewRoot.performTraversals() line: 1114
ViewRoot.handleMessage(Message) line: 1633
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
Wenn ich OnClick ändern (eine andere Reihenfolge) wie:
public void onClick(final View v) {
dismiss();
onClickListener.onClick(v);
}
Es funktioniert, aber nach 6-7 Klick, ich habe:
Thread [<3> main] (Suspended (exception StackOverflowError))
ViewRoot.draw(boolean) line: 1374
ViewRoot.performTraversals() line: 1114
ViewRoot.handleMessage(Message) line: 1633
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
Bug hier irgendwo, aber ich kann nicht verstehen, wo.
Überprüfung this.window nie == null, aber wenn ich nicht nennen 'entlassen()' - keine Ausnahme, so wahrscheinlich Popup-Fenster ungültig ist, aber wie verstecken es? – anber
@anber "Fenster ist ungültig" bedeutet, dass die Aktivität entfernt wurde. Sie müssen in der onDestroy Methode den Dialog schließen. –
Ich mache es, aber habe StackOverflowError nach 6-7 Klicks. – anber