如何从静态 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;
}
};
在 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;
}
};