问题:使用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 on method (PopupWindow)this.window.dismiss()崩溃。
我添加了一个调用dismiss()的计时器,但现在应用程序在6-7语言更改后使用StackOverflowError崩溃。
问题出在哪里?
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();
}
});如果是这样的话,如果是活动中的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 窃听器在某处,但我不知道在哪里。
发布于 2012-04-03 09:22:41
我认为问题在于,在更改应用程序的区域设置后,弹出窗口无效。
不要对null进行计时器检查,而是尝试检查this.window
https://stackoverflow.com/questions/9990275
复制相似问题