2017-11-03 10 views
2

私はアンドロイドN以上で私のアプリの言語を変更するにはAndroid N change language programmaticallyに従ってください。しかし、私はまだアプリケーションコンテキストインスタンスに問題があります。私のApplicationクラスでAndroid:言語を変更するアンドロイドN、アプリケーションインスタンスが更新されない

private static Application mInstance; 

public static Context getApplication() { 
    return mInstance; 
} 

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

    mInstance = this; 
} 

言語が変更されますが、リソースがアプリケーションコンテキストから取得は変更されません。例:

MyApplication.getApplication().getResources().getString(stringId); 

戻り値は間違った言語文字列です。

この状況でアプリケーションインスタンスを更新できますか?私はこの問題に数時間悩んだ。 MyApplication.getApplication()はアプリ全体のさまざまな場所で使用されています。だから私はアクティビティのコンテキストに変換することはできません。

多くのありがとうございます。

+0

言語の変更が完了したら、もう一度onCreateを呼び出してみてください。 'MyApplication.getApplication()。onCreate()'。 また、言語の変更時にアプリケーションを再起動すると、コンテキストを設定する必要があります。 – jitinsharma

+0

マニフェストファイルに** 'application' **の下に**' MyApplication' **を追加しましたか? –

答えて

0

いつもコンテキストが渡される必要がないマネージャとユーティリティが大好きなので、私のアプリで同じ問題が発生します。

私のソリューションは、2つの別々のコンテキスト、1つのアプリケーションコンテキストと1つのロケールコンテキストを含みます。正しいスタイルを使用して正しいロケールで膨らませるなど、すべての問題を解決するわけではありません。そのためには、アクティビティコンテキストを使用する必要があります。ただし、現在のロケールに基づいてリソースから正しい文字列またはイメージを取得する必要がある場合は、このソリューションが機能します。

public class MainApplication extends Application { 
    private static Context applicationContext; 
    private static Context localeContext; 

    public static Context getAppContext() { 
     return applicationContext; 
    } 

    public static Context getLocaleContext() { 
     return localeContext; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     setTheme(R.style.AppTheme); 
     applicationContext = getApplicationContext(); 
     updateLocaleContext(); 
    } 

    public static void updateLocaleContext() { 
     localeContext = LocaleHelper.wrapContext(applicationContext); 
    } 
} 

LocaleHelper.wrapContextはAndroid N change language programmaticallyに受け入れ答えとして同様のソリューションを使用する必要がありますし、すべてのactivitesはattachBaseContextを実装する必要があります。言語が変わるたびにMainApplication.updateLocaleContextを呼び出す必要があります。 注:localeContextはMainApplication.getAppContextを使用しながら、今あなたが)(、正しいロケールに依存リソースに対してMainApplication.getLocaleContext()を使用することができるのonCreate機能に

を設定したスタイルを保持せず、例えば、膨張しますロケールに依存しないビュー。 注:LocaleContextをLocaleHelperに配置して結合を減らすこともできます。

関連する問題