首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序有时会在语言资源更改后崩溃。

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

Stack Overflow用户
提问于 2012-04-03 09:10:28
回答 1查看 1.5K关注 0票数 1

问题:使用StackOverflowError的应用程序崩溃

代码语言:javascript
复制
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。我添加这样的选项卡:

代码语言:javascript
复制
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的两个按钮显示了一个弹出窗口,当单击弹出窗口中的某个按钮时,语言会发生如下变化:

代码语言:javascript
复制
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 on method (PopupWindow)this.window.dismiss()崩溃。

我添加了一个调用dismiss()的计时器,但现在应用程序在6-7语言更改后使用StackOverflowError崩溃。

问题出在哪里?

Upd:我移除计时器。在弹出屏幕中,所有按钮都有一个OnClickListener

在活动中:

代码语言:javascript
复制
    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,则会更改区域设置:

代码语言:javascript
复制
public void setOnClickListener(OnClickListener onClickListener) {
    this.onClickListener = onClickListener;
}

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

单击后,我有异常:

代码语言:javascript
复制
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 (另一个订单),如:

代码语言:javascript
复制
public void onClick(final View v) {
    dismiss();
    onClickListener.onClick(v);
}

它可以工作,但是在6-7点之后,我有:

代码语言:javascript
复制
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 

窃听器在某处,但我不知道在哪里。

EN

回答 1

Stack Overflow用户

发布于 2012-04-03 09:22:41

我认为问题在于,在更改应用程序的区域设置后,弹出窗口无效。

不要对null进行计时器检查,而是尝试检查this.window

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9990275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档