3

ドロップダウンメニューリストで言語ベースを変更したいのですが、このコードが正しく機能しません。この問題を示していますWindow already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41141af0.

私が理解できない問題はどこにありますか。誰か助けてください。

public class LanguageChangedActivity extends Activity {
/** Called when the activity is first created. */

private static String[] rangeArray = new String[] { "English", "Franch",
        "Japanies" };
private Spinner rangeSpinner;
String tempRange = "";
String languageToLoad = "";
boolean isFirstTime = true;
int posit=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // rangeArray = getResources().getStringArray(R.array.rangeArray);

    languageToLoad = "en"; // your language
    // Locale locale = new Locale(languageToLoad);
    // Locale.setDefault(locale);
    // Configuration config = new Configuration();
    // config.locale = locale;
    // getBaseContext().getResources().updateConfiguration(config,
    // getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.main);


    Log.w("isFirstTime onCreate","????");

    // Resources res = getBaseContext().getResources();
    // // Change locale settings in the app.
    // DisplayMetrics dm = res.getDisplayMetrics();
    // android.content.res.Configuration conf = res.getConfiguration();
    // conf.locale = new Locale(languageToLoad.toLowerCase());
    // res.updateConfiguration(conf, dm);

    // range spinner
    rangeSpinner = (Spinner) findViewById(R.id.spinnerLanguage);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, getResources()
                    .getStringArray(R.array.rangeArray));
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    rangeSpinner.setAdapter(adapter);
    rangeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> adapterView, View view,
                int position, long id) {

            posit=position;

            Log.w("isFirstTime onCreate onItemSelected","????");

            if (isFirstTime) {
                isFirstTime = false;
            } else {

                if (position == 0) {
                    languageToLoad = "en";
                } else if (position == 1) {
                    languageToLoad = "fr";
                } else if (position == 2) {
                    languageToLoad = "ja";
                }
                Locale locale = new Locale(languageToLoad);
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                onConfigurationChanged(config);

            }
        }

        public void onNothingSelected(AdapterView<?> adapterView) {
        }
    });

}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    getBaseContext().getResources().updateConfiguration(newConfig,
            getBaseContext().getResources().getDisplayMetrics());

    setContentView(R.layout.main);

    rangeSpinner = (Spinner) findViewById(R.id.spinnerLanguage);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, getResources()
                    .getStringArray(R.array.rangeArray));
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    rangeSpinner.setSelection(posit);
    rangeSpinner.setAdapter(adapter);


    Log.w("isFirstTime onConfigurationChanged","????");
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    Log.w("isFirstTime onResume","????");

}
}
4

4 に答える 4

1

試してみてください...メソッド
を呼び出す代わりにonConfigChange()... 1つのユーザー定義関数toChangeConfig(Config c)を作成し、その関数で書いたのと同じコードステップを実行し、onConfigChange()この関数を で呼び出しますonItemSelected

于 2012-09-19T12:35:25.127 に答える
0

文字列を外部化し、命名方法を使用して、Android に任せてください。

MKJParekh が言ったことも実行する必要があります。 onConfigChange() はコールバックであり、呼び出すものではありません。設定を切り替えると呼び出されるので、別のものを入れてください

Log.d("MY APP", "::onConfigurationChange() fired!");

そして現れるのを待ちます。また、そのコードは onCreate() ではなく onResume にあるべきです - onCreate() は軽いメソッドである必要があることに注意してください。

于 2012-09-19T14:30:22.567 に答える
0

レイアウトのルート要素に ID を与えます。コンテンツをもう一度膨らませる前に、 removeAllViews を試してください。

これは単なる推測ですが、試してみる価値があります。

于 2012-09-15T16:22:43.860 に答える
0

updateConfiguration メソッドを使用してみてください

DisplayMetrics dm = getResources().getDisplayMetrics();
updateConfiguration(config, dm);
于 2012-09-18T11:10:38.150 に答える