java在安卓 OnPreferenceClickListener中调用非静态方法
/**
* A preference change listener to resynchronize a contact list
*
*/
private static Preference.OnPreferenceClickListener resynchronizeContactsListener = new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new AlertDialog() {
}
}
}
在上面这样的代码片段中,我需要调用一个非静态方法,或者创建一个AlertDialog()。因为侦听器是一个静态方法,所以我很难做到这两个方面
例如,AlertDialog。Builder()构造函数需要创建安卓上下文对象,但由于该方法是静态的,因此没有上下文。我考虑将上下文作为参数传递,但是我不确定在不破坏重写方法这一事实的情况下在何处传递
提前谢谢
# 1 楼答案
基本上,静态方法不能调用非静态方法,但我们可以使用引用,其中包括静态方法的非静态方法
这是一个java示例,我认为可以使用这种方式创建对象,并将其引用到静态方法中。 希望它能帮助你
# 2 楼答案
您可以实现首选项。在首选项上,静态地将Listener单击到您自己的类中,并在准备就绪时从活动代码对其进行初始化。(我假设出于某种原因您需要listener对象是静态的,您可以去掉它!)
然后在活动代码中执行以下操作:
我希望代码的结构清晰
# 3 楼答案
只需从声明中删除
static
关键字当类或接口(注意,不是实际的实例化对象,只是类定义)是一个内部类,但没有对其包含类的引用时,它被声明为静态的。乙二醇
Bar不能引用Foo的任何状态,并且可以用
new Foo.Bar()
单独实例化