提问人:Novice 提问时间:7/29/2018 最后编辑:PhantômaxxNovice 更新时间:7/29/2018 访问量:94
无法理解在 View.setOnClickListner(this) 中使用此关键字?
Can't understand use of this keyword in View.setOnClickListner(this)?
问:
我知道关键字这是指类的当前实例。但是当我们在类中实现 View.OnClickListener 时,在调用方法 textview.setOnClickListener(this) 时,setOnClickListener(this) 的参数 this(类的实例对象)如何自动调用 onClick() 方法。视图类中是否有任何代码可以获取对象并在此代码上调用 onClick 方法,或者正在发生其他事情?
我想知道幕后发生了什么,android 是如何从这个关键字到达 onClick() 方法的?这就是我想问的?
答:
OnClickListener
是类中的接口。
如果您的 Activity 通过设置以下方式实现此接口:View
public class MainActivity extends AppCompatActivity implements View.OnClickListener
然后,您可以为视图 Like 按钮设置侦听器:
myButton.setOnClickListener(this);
并覆盖实现它的 onClick 方法,如下所示:
@Override
public void onClick(View v) {
// your code here
}
因此,一个简单的解释是:意味着您的视图将使用活动的重写方法。this
onClick
评论
this
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 金额,类似情况,如果您想监听输入事件,您必须传递原始 View.OnClickListener 对象或实现它并传递以使其工作。this
编辑:
当你传递它时,你告诉当前类处理点击事件本身,并且必须覆盖 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”关键字访问当前类的属性和函数。
评论