2016-06-15 2 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 프로젝트의 기본 언어를 사용하십시오.

아마도 나는 뭔가를 놓치고 있습니다.

대단히 감사합니다.

+0

사용자가 언어를 저장 SWICH는 경우. 시작 화면이 표시되거나 다시 실행 한 후 앱에 저장된 언어를 설정합니다. –

답변

1

마지막으로 해결책을 찾았습니다.

비동기 스레드에서 번역 프로세스를 수행 중이므로 화면이 변경되기 전에 앱이 계속 실행되고 일부 레이아웃이 새 언어로 변경되지 않았습니다.

용액은 onPostExecute() 방법 끝에 의도를 생성하는 것이다 :

@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(); 
} 
관련 문제