内部类是Adapter,内部类是Listener。如何从Listener访问(模糊)适配器成员/方法?
list.setAdapter(new Adapter() {
public View getView() {
// ...
button.setListener(new Listener() {
public void onClick() {
Adapter.this.remove(item);
}
);
}
});
通常要访问外部类成员,你只需要说Outer.this.member,但在这种情况下它给了我以下错误(使用实际的类):
error: not an enclosing class: ArrayAdapter
那么你应该如何从内部内部类访问内部类成员?我不喜欢多级嵌套的匿名类,但在这种情况下,我正在学习一个新的API,并且还不确定它是否更清晰。我已经有一个解决方法,但无论如何都想知道。 remove()并没有真正被内部内部类隐藏,因此在这种情况下指定类并不是必需的,但是想在代码中明确指出这个remove()方法的位置。我也想知道它是否被遮挡。我相信使用Outer.$6.remove()
会起作用,但我不相信它应该也是这样。
答案 0 :(得分:13)
将this
分配给变量,然后访问最里面的类。
list.setAdapter(new Adapter() {
public View getView() {
final Adapter that = this;
button.setListener(new Listener() {
public void onClick() {
that.remove(item);
}
);
}
});
我不确定这里有什么好的命名。也许是adapter
?
答案 1 :(得分:1)
直接在Adapter上调用方法:
list.setAdapter(new Adapter() {
public View getView() {
// ...
button.setListener(new Listener() {
public void onClick() {
remove(item); // <-- this will call Adapter's method of the anonymous class
}
);
}
});
答案 2 :(得分:0)
这很简单:尝试使用没有此类指针的outer.remove