这里的初始化是我的代码:最后的局部变量可能没有在匿名内部类
final Foo myFoo = new Foo(new Inner() {
@Override
callback(){
myFoo.bar();
}
});
(用实际函数名)
final MyArrayAdapter aa = new MyArrayAdapter(new View.OnClickListener() {
@Override
onClick(){
aa.notifyDataSetChanged();
}
});
的Java是给我有关错误如何myFoo可能尚未初始化。有没有什么办法解决这一问题?当我构造对象然后改变它时,我可以将回调函数设置为null,但是我希望有一个更清晰的方法。有任何想法吗? (如果Foo不是由我写的,并且没有公开接口来改变回调以后,那么这将不起作用)
如果任何人都好奇,在我的具体情况下,Foo是一个ArrayAdapter,并且bar是notifyDataSetChanged()。适配器显示的内容取决于数组中项目的值,而这些值在点击时会发生变化。回调是clickListener。
你能刚:
,然后用它像这样请参阅_this.bar()_或_bar()_? – 2012-04-20 01:33:04
不,我的实际代码比这个例子更复杂,并且回调在另一个匿名内部类中 – Drew 2012-04-20 02:08:07
为什么要重写notifyDataSetChanged?从API文档看来,您应该调用myFoo.registerDataSetObserver(new DataSetObserver(){})。 – sharakan 2012-04-20 02:27:01