[英]Refresh all active activities (current and back stack) after changing locale programmatically
我想為我的用戶提供應用內(非設備廣泛)區域設置(語言)更改。 這就是為什么我設置以下代碼,當用戶點擊特定語言時觸發該代碼:
private void setLocale(Locale locale) {
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
到目前為止一直很好,但從現在起我真的不知道如何更新/刷新我的所有活動活動(當前活動和后台堆棧中的所有活動)。 我是否必須覆蓋每個活動的onResume()
? 難道有可能概括一下嗎?
我會使用像這樣的Eventbus庫。
您還可以創建某種設置,一個OnLocaleChangedListener接口,讓所有活動(或其他類)監聽更改,如下所示:
public class LocaleSettings {
Locale locale;
List<OnLocaleChangedListener> listeners;
void changeLocale(Locale newLocale){
this.locale = newLocale;
for(OnLocaleChangedListener listener : listeners){
listener.localeChanged(newLocale);
}
}
void addListener(){
}
void removeListener(OnLocaleChangedListener toRemove){
}
interface OnLocaleChangedListener{
void localeChanged(Locale locale);
}
}
如果它們都擴展了Activity
,您可以創建一個在onStart()
中具有區域設置檢查的超類。 然后,您可以擴展自定義Activity
,只需執行一次區域設置檢查。
像這樣的東西:
public abstract class LocaleActivity extends Activity {
@Override
protected void onStart() {
setLocale(yourLocale);
}
}
然后,假設您有一個名為MainActivity
的活動。 您可以實現它,如下所示:
public class MainActivity extends LocaleActivity {
//no need to override onStart, because we inherit it, whenever the user starts this activity in any way, the locale will set.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.