Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法理解此关键字在View.setOnClickListner中的用法(此)?_Java_Android_Interface_This_Anonymous Class - Fatal编程技术网

Java Can';无法理解此关键字在View.setOnClickListner中的用法(此)?

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

我知道关键字this指的是类的当前实例。但是,当我们在类中实现View.OnClickListener时,调用方法textview.setOnClickListener(this),setOnClickListener(this)的参数this(类的实例对象)如何自动调用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()的权限。