关键字 "this" 在 Listener 中不起作用
Keyword "this" doesn't work in Listener
我在 OnPreferenceChangeListener 中调用方法,其中参数之一 - 上下文。但是当我写:"this" 时,我得到一个错误。我试着写 getContext() 而不是这个,但它也不起作用。请告诉我,我能做什么?
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
final ListPreference lp = (ListPreference) findPreference("background");
lp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String s = String.valueOf(newValue);
/*error*/
DatabaseHelper.updItem(this, s, "my_appearance", "backgroundPatters", 1);
return true;
}
});
}
}
因为您在 Preference.OnPreferenceChangeListener
中使用 this
,而 this
是在该范围内对 Preference.OnPreferenceChangeListener
本身的引用,而不是 MyPreferenceFragment
。如果您想传递对 MyPreferenceFragment
的引用,请像这样修改您的代码:
DatabaseHelper.updItem(MyPreferenceFragment.this, s, "my_appearance", "backgroundPatters", 1);
您可以在此处阅读有关 this
的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
编辑:如果 DatabaseHelper.updItem
需要 Context
那么您可以使用 getActivity()
或 getContext()
获取 Context
并将其传递给DatabaseHelper.updItem
。像这样:
DatabaseHelper.updItem(getContext(), s, "my_appearance", "backgroundPatters", 1);
我在 OnPreferenceChangeListener 中调用方法,其中参数之一 - 上下文。但是当我写:"this" 时,我得到一个错误。我试着写 getContext() 而不是这个,但它也不起作用。请告诉我,我能做什么?
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
final ListPreference lp = (ListPreference) findPreference("background");
lp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String s = String.valueOf(newValue);
/*error*/
DatabaseHelper.updItem(this, s, "my_appearance", "backgroundPatters", 1);
return true;
}
});
}
}
因为您在 Preference.OnPreferenceChangeListener
中使用 this
,而 this
是在该范围内对 Preference.OnPreferenceChangeListener
本身的引用,而不是 MyPreferenceFragment
。如果您想传递对 MyPreferenceFragment
的引用,请像这样修改您的代码:
DatabaseHelper.updItem(MyPreferenceFragment.this, s, "my_appearance", "backgroundPatters", 1);
您可以在此处阅读有关 this
的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
编辑:如果 DatabaseHelper.updItem
需要 Context
那么您可以使用 getActivity()
或 getContext()
获取 Context
并将其传递给DatabaseHelper.updItem
。像这样:
DatabaseHelper.updItem(getContext(), s, "my_appearance", "backgroundPatters", 1);