2013-07-22 2 views
2

이 설정 섹션에서 사용자가 앱에 표시되는 언어를 변경할 수 있도록 허용합니다. 사용자가 다른 언어를 선택하면 언어 변경이 적용될 수 있도록 활동이 다시로드됩니다. 그러나 문제는 사용자가 언어를 변경 한 직후에 다시 클릭하면 배경 활동에 표시된 언어가 여전히 동일하다는 것입니다. 제 질문은, 백그라운드에서 어떤 활동으로 돌아 가면 언어 변경을 적용하려면 어떻게해야합니까? 내가 onResume 메서드의 변경을 감지하기 위해 뭔가를해야한다고 생각하지만, 그것이 무엇인지는 잘 모르겠습니다. 제안 사항이 있으면 알려주십시오. 감사합니다.Android - 뒤로 클릭 할 때 언어 변경

+0

ActivityDource에서 ** onResume ** 메서드를 듣거나 ** ActivitySource에서 ** onBackPressed ** **를 수신하십시오. –

+0

finish()를 사용하여 이전 액티비티로 돌아가려면 인 텐트를 사용하여 새로운 언어로 이전 작업을 새로 고칩니다. – user1283633

답변

3

여러 번 시도해 본 결과 내 문제의 해결책을 찾았습니다. 내 onCreate 방법, 나는 현재 언어의 값을 포함하는 SharedPreferences을 얻고, 현재 언어를 얻을 :

SharedPrefrences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
String language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 

그런 다음 내 onResume 방법, 나는 지역에 변수 language 언급 한 위의 값을 할당 변수를 선택하고 language 값을 업데이트하십시오.

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

     String oldLanguage = language; 
     language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 
     if (!oldLanguage.equals(language)){ 
      finish(); 
      startActivity(getIntent()); 
     } 
    } 

을 그리고 속임수를 썼는지 짜잔 : 서로 다른 경우, 나는 현재 활동을 파괴하고 또 다른 시작됩니다 - 그럼이 두 변수를 비교!

0

나는 SharedPreferences를 사용하도록 제안합니다. 관련 값이있는 lang 키를 거기에 저장하고 필요할 때 업데이트 할 수 있습니다. onResume() 메서드에서 lang 값을 가져온 다음 저장된 값에 따라 뷰를 채울 수 있습니다.

SharedPreferences sharedPreferences; 
sharedPreferences = this.getSharedPreferences("MyActivity", Activity.MODE_PRIVATE); 
String lang = sharedPreferences.getString("lang", "en-GB"); 

SharedPreferences.Editor editor; 
editor = sharedPreferences.edit(); 
editor.putString("lang", "en-US").commit(); 

기본 사항은 다음과 같습니다.

+0

고맙습니다. 배경 활동에서의 변화. –

+0

보기를 만들고 텍스트를 어디에 설정합니까? –

0

변경 작업을 완료 한 후 활동을 다시 시작하려고 시도 했습니까?

당신은 단순히 환경 설정의 변화를 감지 할 때마다 작업을 새로

finish(); 
startActivity(getIntent()); 

를 사용할 수 있습니다.

+0

'onResume'에서 활동을 새로 고침한다고 생각하십니까? 잘 시도해 보았습니다. 끝내고 시작하는 무한 루프 때문에 활동이 거의 시작될 수 없습니다. –

+0

저장된 변수가 없으면'onCreate (null); '을 사용할 수 있습니다. 다시 활동을 재개해야합니다. – Traxex1909

관련 문제