【问题标题】:OnClickListener interface in AndroidAndroid中的OnClickListener接口
【发布时间】:2013-12-26 06:34:31
【问题描述】:

我是编程新手,我对 android 有非常基本的了解。正如我在 Java 中了解到的,无法实例化接口并且 new 是 Java 中的关键字,表示创建实例。我在 Android 中遇到了以下代码:

public class MyActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

    setContentView(R.layout.mylayout);
    findViewById(R.id.button1).setOnClickListener(mButton1_OnClickListener);
  }  

  //On click listener for button1
  final OnClickListener mButton1_OnClickListener = new OnClickListener() {
    public void onClick(final View v) {
        //Inform the user the button has been clicked
        Toast.makeText(this, "Button1 clicked.", Toast.LENGTH_SHORT).show();               
    }
  };
}

上面的代码OnClickListener是一个公共接口,onClick(final View v)是一个抽象方法,我的问题是:OnClickListener是一个接口,如何使用new关键字创建它的实例上面的例子?

【问题讨论】:

  • 或者您可以将这个interface 继承给class = Activity 并使其表现得像OnClick hanler。
  • 我没听明白,你能说得清楚点吗?
  • interface 给出一个行为给谁继承它。这样你就可以决定你的活动是否可以给interface一个click behavior
  • 那么上面的代码会如下所示 public class MyActivity extends Activity implements OnClickListener { public void onClick(final View v) { //通知用户按钮被点击 Toast.makeText( this, "Button1 clicked.", Toast.LENGTH_SHORT).show(); }}。我说的对吗?

标签: java android


【解决方案1】:

在这里,您没有通过匿名内部类实例化您正在执行的接口。您没有创建接口的对象。您正在为匿名类创建此对象,您将在{匿名内部类}中的下一步创建;.如果想知道更多细节,你必须通过匿名内部类。

查看以下链接:

http://c2.com/cgi/wiki?AnonymousInnerClass

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

【讨论】:

  • 好吧,我浏览了 java doc 它说匿名内部类使我们能够同时声明和实例化一个类。但我不明白,接口如何链接到匿名内部类
  • 看到这里你给出了接口的引用然后你正在为一个类创建一个新对象,你将在下一步创建这个类。就是这样。通读任何教程都有些棘手,以便您可以更好地理解。
  • 感谢您的链接,真的很有帮助
【解决方案2】:

它被称为anonymous inner class。这个概念完全不同。在幕后,编译器会自动创建一个新的class,它实现 onClickListenerinterface。

下面的这个链接为您的问题提供了详细的答案。

Creating object from OnClickListener interface

【讨论】:

    【解决方案3】:

    经过长时间的研究,我能够对匿名类进行澄清。Anonymous 代表 NO NAME,因此没有任何名称的类是 Anonymous 类。 例如:

      final OnClickListener mButton1_OnClickListener = new OnClickListener() {
            public void onClick(final View v) {
                //Inform the user the button has been clicked
                Toast.makeText(this, "Button1 clicked.", Toast.LENGTH_SHORT).show();               
            }
          };
    

    我们以上面的代码为例,它是一个匿名实现,其中 mButton1_OnClickListener 是一个匿名类的对象,这个匿名类实现了 OnClickListener 接口。 类似的例子 - How can an anonymous class use "extends" or "implements"?

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2016-01-22
      • 2016-03-13
      相关资源
      最近更新 更多