【问题标题】:Why is (this) used in setOnClickListener()为什么在 setOnClickListener() 中使用 (this)
【发布时间】:2018-04-04 08:45:24
【问题描述】:

请解释为什么在下面的代码中(this) 被用作setOnClickListener() 的参数?如果您能解释一下总代码,我将不胜感激。

public class MainActivity extends Appcomatactivity implements 
        View.OnClickListner {

  Textview textview;
  Button push_me, push_me2;

  protected void onCreate(bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.Layout.activity_main);
    textview = (Textview)findViewById(R.Id.Textview);
    push_me=(Button)findViewById(R.Id.pushmebutton);
    push_me2=(Button)findViewById(R.Id.pushmebutton2);

    // Why does below code use (this) as argument?
    push_me.setOnClickListener(this);
    push_me2.setOnClickListener(this);
  }
  // <...some activity methods...>

  // onclick method defined:
  public void onClick(View view) {
    switch(view.getid()) {
      case R.Id.pushmebutton:
        textview.setText("button 1 clicked");
        break;
      case R.id.pushmebutton2:
        textview.setText("button 2 clicked");
        break;
    }
  }
}

【问题讨论】:

  • 通过实现View.OnClickListener 你是说MainActivity 类可以对某些组件上的click 事件作出反应。为此,您必须在视图中注册MainActivity 实例,这是通过使用该方法将其设置为视图来完成的。

标签: java android oop this


【解决方案1】:

为什么在setonclicklistner中使用(this)

因为您已经为您的活动实现了View.OnClickListener 接口

View.OnClickListener 点击视图时调用回调的接口定义。

通过使用这个push_me.setOnClickListener(this);,您已经为您的视图注册了点击监听器

【讨论】:

    【解决方案2】:

    当我们不想使用匿名类时,我们使用this 其他方式是使用匿名内部类

    //declaring OnClickListener as an object
    private OnClickListener btnClick = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    }
    };
    //passing listener object to button
    btn1.setOnClickListener(btnClick);
    

    如果有多个按钮需要在 onClick 事件上执行相同的代码,那么您可以将侦听器定义为一个对象并将其传递给它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多