4

我有一个奇怪的问题。当我运行应用程序并单击按钮(btn_eng 或 btn_pl)时,我看到登录 logcat(“擦除对话框”或“擦除对话框 PL”),但是下次当我单击它时它不会显示并且按钮不会执行其 onClick 操作. 我试图制作按钮来改变语言。在我的应用程序中,我有一个包含数据表单资源(字符串数组)的对话框,当我更改语言时,我想要擦除对话框并使用足够的数据创建新的对话框。

    //public static Activity act; -> before onCreate(..)
    this.act = this;

    Button btn_eng = (Button) findViewById(R.id.btnEN);
    btn_eng.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("XXX", "Erase dialog");
            act.removeDialog(1);
            Locale locale = new Locale("en");
            Locale.setDefault(locale);
            Configuration config =   act.getBaseContext().getResources().getConfiguration();
            config.locale = locale;
            act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
            act.setContentView(R.layout.main);

        }
    });

    Button btn_pl = (Button) findViewById(R.id.btnPL);
    btn_pl.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("XXX", "Erase dialog PL");
            act.removeDialog(1);
            Locale locale = new Locale("pl");
            Locale.setDefault(locale);
            Configuration config =   act.getBaseContext().getResources().getConfiguration();
            config.locale = locale;
            act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

            act.setContentView(R.layout.main);
        }
    });
4

3 回答 3

3

这是因为您正在重置 onClick 中的内容视图。调用setContentView不会导致运行 -onCreate就是(我猜)您将onClick侦听器链接到按钮的地方。但是,它确实会导致显示布局的全新实例。你需要找到一种新的方式来刷新你的屏幕,而不是用你的新数据替换你的屏幕。最好的方法是ViewGroup为您的活动获取包装并调用View#invalidate();

于 2012-07-15T06:42:36.127 回答
0

尝试删除每个 Onclicklistener 中的 setcontentView() 调用,并尝试在下面放置代码并进行测试

Button btn_eng = (Button) findViewById(R.id.btnEN);
btn_eng.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Log.d("XXX", "Erase dialog");
        act.removeDialog(1);
        if(v.getId()==R.id.btnEN){
        Locale locale = new Locale("en");
        Locale.setDefault(locale);
        Configuration config =   act.getBaseContext().getResources().getConfiguration();
        config.locale = locale;
        act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

   }
    }
 });

Button btn_pl = (Button) findViewById(R.id.btnPL);
btn_pl.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Log.d("XXX", "Erase dialog PL");
        act.removeDialog(1);
     if(v.getId()==R.id.btnPL){
        Locale locale = new Locale("pl");
        Locale.setDefault(locale);
        Configuration config =   act.getBaseContext().getResources().getConfiguration();
        config.locale = locale;
        act.getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

    }
   });

请分享结果并接受它,如果它在你的端工作,因为它在我的端运行良好

于 2012-07-18T12:05:30.043 回答
0

setContentView(R.layout.main);不允许多次调用,如果要更改屏幕内容,您应该在 Layout/.xml 文件中包含Layouts/Views/ViewGroups并更新它们,而不是再次调用 setContentView。

于 2012-07-15T06:49:50.200 回答