如何在Android运行时重新加载静态方法

时间:2018-02-05 05:08:36

标签: java android static

我目前正致力于在Android应用上动态更改语言环境。当用户的语言环境发生变化时,我将信息存储在SharedPreferences中,每个Activity在创建时都会引用语言环境信息。

但是,我的应用程序中的静态方法存在一些问题,尤其是在我的Util类中。我在静态方法中使用特定于语言环境的字符串,但由于它们已经在内存中,因此不会重新加载它们。

似乎android会在设备区域设置更改时重新加载所有类,因为更改设备语言/区域设置会显示所有适当的区域设置字符串。如何在更改用户语言后手动执行此操作?

以下是我的应用程序的 onConfigurationChanged 中调用的代码,以及我的活动的 attachBaseContext

Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());

config.setLocale(getLocale());
context = context.createConfigurationContext(config);

更新 这是我的代码中有一个与静态方法有关的问题的例子。

public static String convertPassedDayFormat(Date date) {
    BaseApplication app = BaseApplication.get();
    int diffDay = diffDayFromCurrent(date);
    if (diffDay < 1) return app.getString(R.string.word_today);
    if (diffDay < 2) return app.getString(R.string.word_yesterday);
    if (diffDay < 4) return String.format(app.getString(R.string.word_day_passed), diffDay);
    return convertFormat(date, app.getString(R.string.format_print_day_year));
}

这部分代码不会返回适当的字符串。

1 个答案:

答案 0 :(得分:0)

问题的问题出在静态方法convertPassedDayFormat()中,用于获取字符串资源,您使用的旧上下文可能不包含更新的配置(因为它是静态的)

您需要做的是,不应从BaseApplication.get()获取静态上下文方法,而应将新的上下文作为参数传递给静态方法,如下所示

public static String convertPassedDayFormat(Date date, Context app) {

    int diffDay = diffDayFromCurrent(date);
    if (diffDay < 1) return app.getString(R.string.word_today);
    if (diffDay < 2) return app.getString(R.string.word_yesterday);
    if (diffDay < 4) return String.format(app.getString(R.string.word_day_passed), diffDay);
    return convertFormat(date, app.getString(R.string.format_print_day_year));
}