2012-04-03 146 views
1

問題:應用程序崩潰與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這裏的某個地方,但我不明白的地方。

回答

0

我認爲問題是,更改應用程序的區域設置配置後,彈出窗口無效。

相反定時檢查null的,請檢查this.window

+0

this.window從不== NULL,但如果我不叫'解僱()' - 也不例外,所以大概彈出窗口是無效的,但如何隱藏它? – anber 2012-04-03 11:02:54

+0

@anber「窗口無效」表示活動已被刪除。你需要在onDestroy方法關閉對話框。 – 2012-04-03 11:23:58

+0

我這樣做,但6-7點擊後有StackOverflowError。 – anber 2012-04-03 11:43:43