2016-06-15 5 views
0

MainActivity.javaでアプリの言語を選択していますが、正しく動作しないことがあります。私は(それが正しく値を返している)私のデータベースから各ユーザーの言語を取得していますFetchUserLanguage(Android)言語が正しく動作しない

if(!SaveSharedPreference.getUserId(MainActivity.this).equals("")) { 
    if (SaveSharedPreference.getWhoLoggedIn(MainActivity.this).equals("Main_User")) { 
     FetchUserLanguage fetchUserLanguage = new FetchUserLanguage(); 
     fetchUserLanguage.execute(); 
    } 
} else { 
    sDefSystemDefaultLanguage = Resources.getSystem().getConfiguration().locale; 
    Configuration configuration = new Configuration(); 
    configuration.locale = sDefSystemDefaultLanguage; 
    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics()); 
} 

これはonCreate方法に私のコードです。

私はLocaleを設定する方法は次です:

@Override 
protected void onPostExecute(String result) { 
    switch (result) { 
     case "English": 
      locale = new Locale("en"); 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
     case "Deutsch": 
      locale = new Locale("de"); 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
     default: 
      locale = Resources.getSystem().getConfiguration().locale; 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
    } 
} 

私は、Android Studioからアプリケーションを実行すると、それは完璧に動作し、すべてのアプリが選択した言語に設定されているが、その後、もしI閉じてもう一度開くと、最初の画面が英語で表示されます(もう1つはドイツ語です)。デバイスの言語は英語ですので、Androidプロジェクトのデフォルト言語を使用してください。

多分私は何かを欠いています。

ありがとうございました。

+0

ソリューションはonPostExecute()メソッドの最後に意思を作成することです。スプラッシュ画面が表示されたら(または再起動後に)、アプリの保存言語を設定します。 –

答えて

1

最後に私は解決策を見つけました。

問題は、非同期スレッドで翻訳プロセスを実行していたため、アプリケーションがまだ実行されていて、画面が変更される前にレイアウトの一部が新しい言語に変更されていないということでした。ユーザーが保存言語をswichとき

@Override 
protected void onPostExecute(String result) { 
    switch (result) { 
     case "English": 
      locale = new Locale("en"); 
      Locale.setDefault(locale); 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage()); 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
     case "Deutsch": 
      locale = new Locale("de"); 
      Locale.setDefault(locale); 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage()); 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
     default: 
      locale = Resources.getSystem().getConfiguration().locale; 
      Locale.setDefault(locale); 
      SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage()); 
      configuration = new Configuration(); 
      configuration.locale = locale; 
      getBaseContext().getResources().updateConfiguration(configuration, 
        getBaseContext().getResources().getDisplayMetrics()); 
      break; 
    } 
    Intent intent = new Intent(MainActivity.this, MainMenuActivity.class); 
    if(SaveSharedPreference.getUserType(MainActivity.this).equals("Full")) { 
     intent.putExtra("Type", "Full"); 
    } 
    startActivity(intent); 
    finish(); 
} 
関連する問題