2012-04-03 9 views
1

問題をクラッシュします。私はこのようにタブを追加:アプリケーションは時々言語リソースの変更後

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

とするとき、私はこの方法ポップアップで(PopupWindow)this.window.dismiss()NullPointerとアプリケーションがクラッシュし、言語(レイアウトと値)を変更するために、1つのタブに6-7回クリックします。

dismiss()を呼び出すためのタイマーを追加しましたが、今度はアプリケーションが6-7言語の変更後にStackOverflowErrorでクラッシュします。

問題はどこですか?

UPD:私はタイマーを削除します。ポップアップ画面では、すべてのボタンにOnClickListenerが1つあります。それはこのようになります場合は、活動中this.onClickListener外部ClickListener、魔女変更ロケールた

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

:活動で

クリックした後

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 

バグをここにどこかが、私はどこを理解することはできません。

答えて

0

私は問題は、アプリケーションのロケール設定を変更した後、ポップアップウィンドウが無効だと思います。例外をするので、おそらくどのように非表示のウィンドウが無効でポップアップが、 - その代わりnullのタイマーチェックの

は、 `)(私は呼んでいない場合== nullが、しかし、`却下決してthis.window

+0

this.windowをチェックしてみてくださいませんそれ? – anber

+0

@anber "ウィンドウが無効です"は、アクティビティが削除されたことを意味します。 onDestroyメソッドの解除ダイアログが必要です。 –

+0

私はそれを行うが、6-7回のクリック後にStackOverflowErrorを持つ。 – anber

関連する問題