Java 关键词";这";不';在监听器中不工作
我调用方法,其中一个参数是OnPreferenceChangeListener中的context。但当我写“这个”时,我得到了一个错误。我试图编写getContext()而不是这个,但它也不起作用。请告诉我,我能做什么Java 关键词";这";不';在监听器中不工作,java,android,actionlistener,android-context,Java,Android,Actionlistener,Android Context,我调用方法,其中一个参数是OnPreferenceChangeListener中的context。但当我写“这个”时,我得到了一个错误。我试图编写getContext()而不是这个,但它也不起作用。请告诉我,我能做什么 public static class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState
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;
}
});
}
}
因为您正在
首选项中使用此
。OnPreferenceChangeListener
和此
是对首选项的引用。OnPreferenceChangeListener
本身在该范围内,而不是MyPreferenceFragment
。如果要传递对MyPreferenceFragment
的引用,请按如下方式修改代码:
DatabaseHelper.updItem(MyPreferenceFragment.this, s, "my_appearance", "backgroundPatters", 1);
DatabaseHelper.updItem(getContext(), s, "my_appearance", "backgroundPatters", 1);
您可以在此处阅读有关此的更多信息:
编辑:如果DatabaseHelper.updItem
需要Context
,则可以使用getActivity()
或getContext()
获取Context
并将其传递给DatabaseHelper.updItem
。大概是这样的:
DatabaseHelper.updItem(MyPreferenceFragment.this, s, "my_appearance", "backgroundPatters", 1);
DatabaseHelper.updItem(getContext(), s, "my_appearance", "backgroundPatters", 1);
使用
MyPreferenceFragment。这个好吧,你会得到什么样的错误?这是否暗示了什么?当执行onPreferenceChange()
方法时这是对该方法所属对象的引用。在您的例子中,它是由新首选项创建的对象。OnPreferenceChangeListener()
。Bare此
始终引用它在其方法中显示的对象。在您的代码中,这是Preference.OnPreferenceChangeListener
的一个实例,它不太可能是您要传递给DatabaseHelper.Updatem
.luk2302的对象-将方法'Updatem'的1s参数从'Context'更改为'MyPreferenceFragment'。这是不可行的。我再次遇到相同的错误-将方法'Updatem'的第一个参数从'Context'更改为'MyPreferenceFragment'