簡體   English   中英

以編程方式更改語言環境后,刷新所有活動活動(當前堆棧和后堆棧)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM