应用程序有时会在语言资源更改后崩溃

时间:2012-04-03 09:10:28

标签: android exception localization popup

问题:应用程序与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上的(PopupWindow)this.window.dismiss()崩溃。

我添加了一个用于调用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();
        }
    });

如果它看起来像这样,那么Activity中的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在某处,但我无法理解在哪里。

1 个答案:

答案 0 :(得分:0)

我认为问题是在更改应用程序的语言环境配置后,弹出窗口无效。

而不是null的计时器检查,请尝试检查this.window

相关问题