2011-01-10 23 views
2

重新加載現有活動的正確方法是讓用戶更改語言環境的設置對話框/活動。在該活動我叫什麼是強制使用新的本地

Resources res = ctx.getResources(); 
// Change locale settings on the device 
DisplayMetrics dm = res.getDisplayMetrics(); 
android.content.res.Configuration conf = res.getConfiguration(); 
conf.locale = new Locale(language_code.toLowerCase(), 
coutry_code.toUpperCase()); 
res.updateConfiguration(conf, dm); 

,並調用調用onChanged()爲我設置的ListView ......一切都改變 完美。非常好。 然後我點擊後退按鈕回到上一個活動 ,認爲應該切換一切;不。一切仍然在 以前的區域設置。所以我在 的onResume()中加入了上面的代碼,認爲這樣做的活動;不。另外,當我再次點擊此活動的菜單按鈕(不是第一次)時,我沒有在onCreateOptionsMenu()中調用 ,它只顯示上一個菜單。 我的問題是什麼是強制現有活動到 重新加載使用新的本地?

回答

1

我並不確切,但這似乎是一個開銷。 swithicng語言環境的標準方式是通過系統設置。讓用戶在那裏切換語言環境,並在代碼中使用Locale.getDefault()

+0

我可以直接在我的應用程序中調用設置ui,而不是使用systerm菜單調用系統設置。 – pengwang

0

父活動中的OnSharedPreferenceChangeListener是響應首選項更改的正確位置。至於刷新UI,我不完全確定。我們被告知讓android爲我們管理我們活動的生命週期,但是imho並不總是能夠工作。一種選擇是從onSharedPreferenceChanged調用onCreate()。

編輯:對不起,這位聽衆可能不會工作,因爲你不是在談論共享偏好。