2013-07-22 18 views
2

我有這個設置部分,我允許用戶更改應用程序中顯示的語言。當用戶選擇不同的語言時,活動被重新加載,以便可以應用語言的改變。但問題是,當用戶在改變語言後點擊右鍵時,後臺活動中顯示的語言仍然是相同的。 所以我的問題是,當我回到背景上的某些活動時,應該如何應用語言更改?我想我應該做些什麼來檢測onResume方法的變化,但我不確定它是什麼。如果您有任何建議,請讓我知道。 謝謝。Android - 點擊後改變語言

+0

在ActivityDestination中監聽** onResume **方法或在ActivitySource中監聽** onBackPressed **。 – 2013-07-22 09:26:58

+0

如果您使用完成()返回上一個活動 嘗試使用意圖,而不是使用新語言刷新以前的活動 – 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