Android 我不知道';我不能完全理解你的听众

Android 我不知道';我不能完全理解你的听众,android,anonymous-inner-class,Android,Anonymous Inner Class,因此,当我们将onClickListener设置为按钮时,它看起来是这样的 private Button myButton = (Button) findViewById(R.id.my_button); myButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ //do this } }); 所以我们在声明新视

因此,当我们将onClickListener设置为按钮时,它看起来是这样的

private Button myButton = (Button) findViewById(R.id.my_button);

myButton.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View view){
        //do this
    }

});
所以我们在声明新视图时创建了一个匿名类。OnClickListener。。。实现OnClickListener接口/并重写其onClick方法。我不明白的是,如果我们没有对这个anon类的引用,因为它是匿名的,那么如何调用onClick()方法呢?我只实现了一个匿名类来覆盖所述类中的某些方法,如下所示:

public class Foo{
    public void bar(){
        //do something
    }
}


Foo foo = new Foo(){
    @Override
    public void bar(){
        //do something else
    }
}
这对我来说非常有意义,因为现在,每当我使用“foo”引用调用bar()方法时,该引用都将使用bar的重写版本。对于按钮,没有对onClick()的引用。我对此感到非常困惑

我不明白的是,如果我们没有对这个anon类的引用,因为它是匿名的,那么如何调用onClick()方法呢

myButton
保留您创建的匿名内部类的实例<因此,code>myButton可以对其调用
onClick()

我不明白的是,如果我们没有对这个anon类的引用,因为它是匿名的,那么如何调用onClick()方法呢


myButton
保留您创建的匿名内部类的实例<因此,code>myButton可以对其调用
onClick()

onClick事件在button对象中调用,该对象使用您设置的引用委托给匿名类onClick

在button对象中调用onclick事件,该对象使用您设置的引用委托给您的匿名类onclick

如果这有助于您的理解,您可以改写为:

View.OnClickListener listener = new View.OnClickListener(){
    @Override
    public void onClick(View view){
        //do this
    }
};
myButton.setOnClickListener(listener);

该按钮在侦听器超出范围后保留引用,并可以对保留的侦听器对象调用
onClick
回调。

如果它有助于您的理解,您可以重写为:

View.OnClickListener listener = new View.OnClickListener(){
    @Override
    public void onClick(View view){
        //do this
    }
};
myButton.setOnClickListener(listener);

该按钮在侦听器超出范围后保留引用,并可以对保留的侦听器对象调用
onClick
回调。

该按钮使用重写的onClick保留对对象的引用该按钮使用重写的onClick保留对对象的引用,但如果我尝试调用myButton.onClick();它似乎不认识那个方法。@JoshDerk:那是因为
myButton
是一个
按钮
myButton
保存您的
OnClickListener
myButton
本身不是您的
onClick Listener
按钮
没有
onClick()
方法。我想我已经明白了,您的评论帮助了我。我在这里画了一个小东西。嗯,但是如果我尝试调用myButton.onClick();它似乎不认识那个方法。@JoshDerk:那是因为
myButton
是一个
按钮
myButton
保存您的
OnClickListener
myButton
本身不是您的
onClick Listener
按钮
没有
onClick()
方法。我想我已经明白了,您的评论帮助了我。我在这里画了一个小东西。我想我已经弄明白了,最后一件事。setOnClickListener(View.OnClickListener L)方法是否调用了L.onClick()?当用户单击按钮时,它很可能存储了调用“onClick”方法的侦听器。换句话说,onClick()是稍后通过接口调用的?例如,该按钮具有方法setOnClickListener(View.OnClickListener L),L是OnClickListener接口的变量名。我现在可以使用L.onClick()调用onClick(),这似乎正确吗?非常感谢!这真的很有帮助。我想我知道了,最后一件事。setOnClickListener(View.OnClickListener L)方法是否调用了L.onClick()?当用户单击按钮时,它很可能存储了调用“onClick”方法的侦听器。换句话说,onClick()是稍后通过接口调用的?例如,该按钮具有方法setOnClickListener(View.OnClickListener L),L是OnClickListener接口的变量名。我现在可以使用L.onClick()调用onClick(),这似乎正确吗?非常感谢!这真的很有帮助。