問題:應用程序崩潰與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次以更改語言(佈局和值)時,應用程序會在彈出窗口中使用方法(PopupWindow)this.window.dismiss()
上的NullPointer
崩潰。
我添加了一個定時器,用於調用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();
}
});
如果它看起來像這樣,是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這裏的某個地方,但我不明白的地方。
this.window從不== NULL,但如果我不叫'解僱()' - 也不例外,所以大概彈出窗口是無效的,但如何隱藏它? – anber 2012-04-03 11:02:54
@anber「窗口無效」表示活動已被刪除。你需要在onDestroy方法關閉對話框。 – 2012-04-03 11:23:58
我這樣做,但6-7點擊後有StackOverflowError。 – anber 2012-04-03 11:43:43