我知道该关键字引用了类的当前实例。但是,当我们在类中实现View.OnClickListener时,然后调用方法textview.setOnClickListener(this)时,setOnClickListener(this)的this(类的实例对象)的参数如何自动调用onClick()方法。视图类中是否有任何代码接受对象并在此代码上调用onClick方法或发生其他事情?
我想知道幕后情况,android如何从此关键字到达onClick()方法?这就是我想问的吗?
答案 0 :(得分:0)
OnClickListener
是类View
中的接口。
如果您的活动通过设置以下内容来实现此界面:
public class MainActivity extends AppCompatActivity implements View.OnClickListener
然后您可以为按钮之类的视图设置侦听器:
myButton.setOnClickListener(this);
并重写实现该方法的onClick方法:
@Override
public void onClick(View v) {
// your code here
}
一个简单的解释是:this
表示您的视图将使用您活动中覆盖的onClick
方法。
答案 1 :(得分:0)
让我们有一个ElectricityBill界面
created() {
HTTP.get(`user`)
.then(response => {
})
.catch(e => {
this.errors.push(e)
})
}
现在您可以通过两种方式支付电费,方法是去附近的电力局
public interface ElectricityBill{
public void pay(int amount);
}
或通过在线支付账单
ElectricityBill bill = new ElectricityBill(){
@Override
public void pay(int amount){
}
}
payBill(bill);
在两种情况下,用户都必须支付XXX金额,如果您想听输入事件,则必须通过原始的 View.OnClickListener 对象或实施并传递 public class User implements ElectricityBill{
.....
@Override
public void pay(int amount){
}
}
.....
payBill(this);
}
使其生效。
编辑:
当您通过此操作时,您告诉当前类自己处理click事件,并且必须重写onClick()来执行此操作。当您传递对象时,您可以通过创建匿名类并实现onClick()来让原始类处理onClick。但是,当您通过此操作时,当前的课程将获得侦听输入事件的权限。它成为OnClicklistener的类型,并具有监听onClick()的权限
答案 2 :(得分:0)
要在代码中实现View.setOnclickListener,您需要首先实现公共静态接口View.OnClickListener。
喜欢
public class MyActivity extends Activity implements View.OnClickListener {
}
上面的接口包含公共无效抽象方法“ 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”关键字访问当前类的属性和函数。