如何从静态 Preference.OnPreferenceChange 侦听器获取字符串资源?害怕弄乱自动生成的代码

How to get a string resource from a static Preference.OnPreferenceChange listener? Scared to mess up the autogenerated code

在 SettingsActivity 中自动生成的一些代码如下所示(缩写版本):

private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();

        if (preference.getKey().equals("notification_period")){
            preference.setSummary(stringValue + /* Resource: R.string.notification_period_summary*/));
        } 
        return true;
    }
};

我需要从 strings.xml 获取资源,但我认为我没有可用的上下文。我尝试将其更改为 SettingsActivity.this.getString(R...),但它说我无法通过静态方法执行此操作。我尝试向该方法添加一个 Context context,但它不遵循它需要覆盖的签名。

我不太确定从哪里调用该方法,或者是否需要签名匹配才能调用它。还有另一个静态方法 private static void bindPeferenceSummaryToValue 其中包含这行代码:

sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
            PreferenceManager
                    .getDefaultSharedPreferences(preference.getContext())
                    .getString(preference.getKey(), ""));

我也不确定那到底是做什么的。

你可以用Preference的方法getContext()得到Context:

private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();

        if (preference.getKey().equals("notification_period")){
            String notificationPeriodSummary = preference.getContext().getResources().getString(R.string.notification_period_summary);
            preference.setSummary(stringValue + notificationPeriodSummary));
        } 
        return true;
    }
};