我不完全理解 onClickListeners
I don't fully understand onClickListeners
所以当我们将 onClickListener 设置为按钮时,它看起来像这样。
private Button myButton = (Button) findViewById(R.id.my_button);
myButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
});
因此,当我们声明新的 View.OnClickListener... 并实现 OnClickListener 接口/并覆盖它的 onClick 方法时,我们正在创建一个无名的匿名 class。我不明白的是,如果我们没有引用这个 anon class,因为它是无名的,那么如何调用 onClick() 方法?我只实现了一个匿名 class 来覆盖所述 class 中的某些方法,如下所示:
public class Foo{
public void bar(){
//do something
}
}
Foo foo = new Foo(){
@Override
public void bar(){
//do something else
}
}
这对我来说非常有意义,因为现在,只要我使用 "foo" 引用来调用 bar() 方法,该引用就会使用 bar 的覆盖版本。对于 Button,没有对 onClick() 的引用。我对此一头雾水。
What I don't understand, is if we have no reference to this anon class, because it's nameless, how does the onClick() method get called?
myButton
持有您创建的匿名内部 class 的实例。 myButton
,因此,可以对其调用onClick()
。
在按钮对象中调用 onclick 事件,此对象使用您设置的引用委托给您的匿名 class onclick。
如果对你的理解有帮助,你可以重写为:
View.OnClickListener listener = new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
};
myButton.setOnClickListener(listener);
按钮在侦听器超出范围后保留引用,并且可以在保留的侦听器对象上调用 onClick
回调。
所以当我们将 onClickListener 设置为按钮时,它看起来像这样。
private Button myButton = (Button) findViewById(R.id.my_button);
myButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
});
因此,当我们声明新的 View.OnClickListener... 并实现 OnClickListener 接口/并覆盖它的 onClick 方法时,我们正在创建一个无名的匿名 class。我不明白的是,如果我们没有引用这个 anon class,因为它是无名的,那么如何调用 onClick() 方法?我只实现了一个匿名 class 来覆盖所述 class 中的某些方法,如下所示:
public class Foo{
public void bar(){
//do something
}
}
Foo foo = new Foo(){
@Override
public void bar(){
//do something else
}
}
这对我来说非常有意义,因为现在,只要我使用 "foo" 引用来调用 bar() 方法,该引用就会使用 bar 的覆盖版本。对于 Button,没有对 onClick() 的引用。我对此一头雾水。
What I don't understand, is if we have no reference to this anon class, because it's nameless, how does the onClick() method get called?
myButton
持有您创建的匿名内部 class 的实例。 myButton
,因此,可以对其调用onClick()
。
在按钮对象中调用 onclick 事件,此对象使用您设置的引用委托给您的匿名 class onclick。
如果对你的理解有帮助,你可以重写为:
View.OnClickListener listener = new View.OnClickListener(){
@Override
public void onClick(View view){
//do this
}
};
myButton.setOnClickListener(listener);
按钮在侦听器超出范围后保留引用,并且可以在保留的侦听器对象上调用 onClick
回调。