关键字 "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);