2012-04-03 6 views
1

Problem: Anwendung abstürzt mit StackOverflowErrorAnwendung stürzt manchmal nach Sprachressourcenwechsel

ViewRoot.draw(boolean) line: 1374 
ViewRoot.performTraversals() line: 1114 
ViewRoot.handleMessage(Message) line: 1633 
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 

habe ich eine TabActivity mit einigen Registerkarten. Ich füge Registerkarten wie folgt aus:

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); 

Im Reiter habe ich auf Klick zeigen, dass ich ein Pop-up mit zwei Tasten aus Android popup window dismissal Wenn einige Schaltfläche in Popup auf klicken, wechselt die Sprache wie folgt aus:

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)); 
} 

Und wenn ich 6-7 Mal in einer Registerkarte klicken, um die Sprache (Layout und Werte) zu ändern, stürzt die Anwendung mit NullPointer auf Methode (PopupWindow)this.window.dismiss() in Popup.

Ich habe einen Timer für den Aufruf dismiss() hinzugefügt, aber jetzt stürzt Anwendung mit StackOverflowError nach 6-7 Sprachänderungen ab.

Wo ist das Problem?

Upd: Ich entferne Timer. Im Popup-Bildschirm haben alle Tasten einen OnClickListener.

In Aktivität:

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(); 
     } 
    }); 

Wenn es so aussieht, this.onClickListener externe clicklistener in Aktivität Hexe ändern locale waren:

public void setOnClickListener(OnClickListener onClickListener) { 
    this.onClickListener = onClickListener; 
} 

public void onClick(final View v) { 
    onClickListener.onClick(v); 
    dismiss(); 
} 

Nach Klick Ich habe Ausnahme:

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 

Wenn ich OnClick ändern (eine andere Reihenfolge) wie:

public void onClick(final View v) { 
    dismiss(); 
    onClickListener.onClick(v); 
} 

Es funktioniert, aber nach 6-7 Klick, ich habe:

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 hier irgendwo, aber ich kann nicht verstehen, wo.

Antwort

0

Ich denke, das Problem ist, dass nach dem Ändern der Gebietsschema-Konfiguration der App das Popup-Fenster ungültig ist.

Statt Timer-Check für null, versuchen this.window

+0

Überprüfung this.window nie == null, aber wenn ich nicht nennen 'entlassen()' - keine Ausnahme, so wahrscheinlich Popup-Fenster ungültig ist, aber wie verstecken es? – anber

+0

@anber "Fenster ist ungültig" bedeutet, dass die Aktivität entfernt wurde. Sie müssen in der onDestroy Methode den Dialog schließen. –

+0

Ich mache es, aber habe StackOverflowError nach 6-7 Klicks. – anber

Verwandte Themen