Android Button.setClickOnListener说明

时间:2015-01-12 10:23:49

标签: java android

我看到以下代码,用于从Android的文档中为Android中的按钮添加监听器:

public class MyActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);

         setContentView(R.layout.content_layout_id);

         final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
     }
 }

好吧,因为setOnClickListener是一个接口,我们可以将代码修改为:

public class MyActivity extends Activity implements View.OnClickListener {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);

         setContentView(R.layout.content_layout_id);

         final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(this);

     public void onClick(View v) {
                 // Perform action on click
             }
 }

嗯,第二个代码对我来说看起来更合乎逻辑,因为我们给setOnClickListener()方法参数this,它表示监听器附加到的MyActivity类的同一个实例

所以,我不明白第一个代码是如何工作的。根据我的理解new Interface,我们创建了一个实现Interface的匿名类。但是后来如何将侦听器附加到MyActivity对象而不是匿名对象,因为我们将匿名实例作为参数提供给侦听器?

4 个答案:

答案 0 :(得分:2)

  

但是后来如何将侦听器附加到MyActivity对象而不是   匿名的,因为我们将匿名实例作为参数提供给   听众?

监听器永远不会附加到活动中。两者之间没有真正的区别。在这两种情况下,您都提供了一个实现该接口的对象。 View将调用您通过setter提供的对象的onClick方法

答案 1 :(得分:0)

在这两种情况下,您都在提供OnClickListener接口的实现。只是以两种不同的方式(尽管他们确实有微妙的差异)。

我认为您对使用'this'关键字感到困惑,这可能会给人一种印象,即界面以某种方式附加到类(或本例中的活动)(如第二个示例中所示) 。

当类实现接口时,您可以使用'this'关键字来引用该接口的实现。由于setOnClickListener()方法正在寻找OnClickListener而不是Activity,因此编译器知道'this'指的是该类实现的接口的实现。

听起来听起来有点令人困惑......但希望它能为你清除它。

答案 2 :(得分:0)

当你调用button.setOnClickListener(new View.OnClickListener()...时,会创建一个新的匿名View.OnClickListener并作为回调附加到按钮。

实现View.OnClickListener时,您的类(Activity)成为接口方法的实现者。换句话说,您的类扮演View.OnClickListener。

的角色

答案 3 :(得分:0)

第一种方式称为匿名内部类,第二种方式是ur活动类实现 onClickListener接口,第三种方式可能是实现onClickListener接口的分离类,并且你将该类的实例传递给setOnClickListener(),但这可能更难,因为您可能需要与活动类中的对象进行交互,如上所述,一切都会起作用,它只是技术,你可以根据你的需要选择。