问题:应用程序与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 popup window dismissal的两个按钮的弹出窗口 单击弹出窗口中的某个按钮时,语言会发生如下变化:
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()
的计时器,但现在应用程序在6-7语言更改后与StackOverflowError
崩溃。
问题出在哪里?
更新:我删除了计时器。在弹出屏幕中,所有按钮都有一个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();
}
});
如果它看起来像这样,那么Activity中的this.onClickListener外部ClickListener是更改语言环境:
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
Bug在某处,但我无法理解在哪里。
答案 0 :(得分:0)
我认为问题是在更改应用程序的语言环境配置后,弹出窗口无效。
而不是null
的计时器检查,请尝试检查this.window