Проблема: приложение вылетает с 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
У меня есть TabActivity
с некоторыми вкладками.Я добавляю вкладки следующим образом:
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);
Во вкладке, которая у меня есть, при нажатии я показываю всплывающее окно с двумя кнопками из Закрытие всплывающего окна Android При нажатии на какую-либо кнопку во всплывающем окне, язык меняется следующим образом:
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));
}
И когда я нажимаю 6-7 раз на одной вкладке, чтобы изменить язык (макет и значения), приложение вылетает с NullPointer
по методу (PopupWindow)this.window.dismiss()
внеожиданно возникнуть.
Я добавил таймер для вызова dismiss()
, но теперь приложение вылетает с StackOverflowError
после 6-7 смен языка.
В чем проблема?
Upd: Убираю таймер.На всплывающем экране все кнопки имеют одну OnClickListener
.
В действии:
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();
}
});
Если бы это выглядело так, если бы это был внешний ClickListener this.onClickListener в Activity, измените локаль:
public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void onClick(final View v) {
onClickListener.onClick(v);
dismiss();
}
После нажатия у меня естьисключение:
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
Если я изменю onClick (другой порядок), например:
public void onClick(final View v) {
dismiss();
onClickListener.onClick(v);
}
Это работает, но после 6-7 щелчков у меня есть:
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
Ошибка здесь где-то, но я не могу понять, где.