Java Can';无法理解此关键字在View.setOnClickListner中的用法(此)?
我知道关键字this指的是类的当前实例。但是,当我们在类中实现View.OnClickListener时,调用方法textview.setOnClickListener(this),setOnClickListener(this)的参数this(类的实例对象)如何自动调用onClick()方法。视图类中是否有任何代码在此代码上获取对象并调用onClick方法,或者正在进行其他操作Java Can';无法理解此关键字在View.setOnClickListner中的用法(此)?,java,android,interface,this,anonymous-class,Java,Android,Interface,This,Anonymous Class,我知道关键字this指的是类的当前实例。但是,当我们在类中实现View.OnClickListener时,调用方法textview.setOnClickListener(this),setOnClickListener(this)的参数this(类的实例对象)如何自动调用onClick()方法。视图类中是否有任何代码在此代码上获取对象并调用onClick方法,或者正在进行其他操作 我想知道幕后发生了什么,android是如何从这个关键字到达onClick()方法的?这就是我想问的?OnClick
我想知道幕后发生了什么,android是如何从这个关键字到达onClick()方法的?这就是我想问的?
OnClickListener
是类视图中的一个接口
如果您的活动通过设置来实现此接口:
public class MainActivity extends AppCompatActivity implements View.OnClickListener
然后,您可以为类似视图的按钮设置侦听器:
myButton.setOnClickListener(this);
并重写onClick方法,实现如下所示:
@Override
public void onClick(View v) {
// your code here
}
因此,一个简单的解释是:这
意味着您的视图将使用活动的重写onClick
方法。让我们创建一个接口ElectricityBill
public interface ElectricityBill{
public void pay(int amount);
}
现在有两种方法可以支付电费,一种是去附近的电力局办公室
ElectricityBill bill = new ElectricityBill(){
@Override
public void pay(int amount){
}
}
payBill(bill);
或者通过在线支付账单
public class User implements ElectricityBill{
.....
@Override
public void pay(int amount){
}
}
.....
payBill(this);
}
在这两种情况下,用户都必须支付XXX金额,如果您想要收听输入事件,则情况类似,您必须传递原始的视图。单击Listener对象或实现它并传递此
,使其工作
编辑:
当您传递这个消息时,您会告诉当前类自己处理click事件,并且必须重写onClick()才能这样做。当传递对象时,通过创建一个匿名类并实现onClick(),让原始类处理onClick。但是当你通过这个测试时,你当前的类就获得了监听输入事件的权限。它变为OnClicklistener类型,并获得侦听onClick()的权限。要在代码中实现View.setOnclickListener,您需要首先实现公共静态接口View.OnClicklistener
像这样
public class MyActivity extends Activity implements View.OnClickListener {
}
上面的接口包含公共的void抽象方法“onClick(View v)”,您可以重写它来放置逻辑
单击视图时调用此方法
为了简单起见,我创建了代码
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
这里,OnclickListener是一个具有对象mCorkyListener的接口
类似地,您也可以使用此关键字代替mCorkyListener
“this”表示当前类的实例。您可以使用“this”关键字访问当前类的属性和函数。但我想知道幕后发生了什么,android是如何从这个关键字到达onClick()方法的?这就是我想问的?这个关键字指向覆盖的onClick。您必须深入了解Java类和接口。如果你搜索的话,有很多教程要遵循。我读到的每一个地方都说关键字this指的是类的当前实例。你能让我参考任何一篇有适当解释的文章吗?确切地说,关键字this
意味着该活动将处理onClick
method问题是,该关键字如何指向重写的onClick method()?因为在每篇文章的任何地方,他们都说这个关键字引用类的当前实例。什么是payBill?payBill()获取ElectricityBill的一个实例,您可以通过创建一个对象或传递它来传递它@新手当您传递此消息时,您会告诉当前类自己处理单击事件,并且必须重写onClick()来完成此操作。当传递对象时,通过创建一个匿名类并实现onClick(),让原始类处理onClick。但是当你通过这个测试时,你当前的类就获得了监听输入事件的权限。它变为OnClicklistener类型,并获得侦听onClick()的权限。