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。画面を新しいデータで置き換えるのではなく、画面を更新する新しい方法を見つける必要があります。最善の方法は、アクティビティのラッピングを取得してView#invalidate();を呼び出すことです。ViewGroup

于 2012-07-15T06:42:36.127 に答える
0

setContentView(R.layout.main);2回以上呼び出すことは許可されていません。画面の内容を変更する場合は、setContentViewを再度呼び出す代わりに、Layout/.xmlファイルにLayouts/Views/ViewGroupsを含めて更新する必要があります。

于 2012-07-15T06:49:50.200 に答える
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 に答える