2012-04-13 5 views
13

をデフォルトに戻って変更しますViewPagerにFragmentPagerAdapter、androidに3つのタブ2.3.7。問題は、タブを切り替えるときにアプリのロケールが英語に戻ってしまうことがあるため、UIには今から複数の言語が混在しているということです。私は常にアダプタのgetItem()メソッドのタブのために新しいフラグメントを作成します。私がデバイスを回転させると、ロケールは再び正しくなります。アンドロイドロケールがランダムに私は1つの活性を有するとのonCreateに私は好みの言語をロードし、このようにロケールを設定

私はまた、アンドロイド入れ試み:)(マニフェストとonConfigurationChangedオーバーライドしないでconfigChangesは=「ロケール」が、結果は同じです。

最悪の事態はそれだけでいくつかの時間を発生し、私もこのことについて、ユーザーからの報告があり、それは100%の再現性ではないこと、です。アプリケーションが開始され、いくつかのタブの切り替え後にロケールが変更されないと、終了するまで正しくロケールされます。

答えて

10

いくつかの時間後、私は道を考え出しました。私のために働く唯一の解決策は、メインのAcitivityのonCreate()、各FragmentのonCreateView()、各BroadcastReceiver()のonReceive()(リソースをロードする場合)、およびすべてのサービスの開始時に常にロケールを設定することです。このために、私はメインと唯一のアクティビティで静的メソッドsetLocale()を作成しました。より多くのアクティビティがある場合、それはカスタムアプリケーションクラスに配置できます。

最後の1つです。アプリがデバッグのためにIDEから直接起動されていても、これは何度か動作しません。デバイス上で正常に動作するかどうかは心配しないでください(少なくとも私の場合)。

public static void setLocale(Context context) { 
    final String lang = PreferenceManager.getDefaultSharedPreferences(context).getString("locale", "en"); 
    final Locale newLocale = new Locale(lang); 
    Locale.setDefault(newLocale); 
    final Configuration config = new Configuration(); 
    config.locale = newLocale; 

    final Resources res = context.getResources(); 
    res.updateConfiguration(config, res.getDisplayMetrics()); 
} 
関連する問題