【问题标题】:Test extends Activity implements onClickListener, when/where does the instance of class "Test" created?Test extends Activity 实现 onClickListener,“Test”类的实例何时/何地创建?
【发布时间】:2013-10-13 07:43:40
【问题描述】:

在以下代码中,“Test”类扩展了 Acitivity 并实现了 OnClickListener。

但是,“this”指的是“Test”类的实例。没有“新”可以创造 “测试”类的新对象。那么,Test 类的实例在哪里/何时创建?

public class Test extends Activity implements OnClickListener {

Button playButton;

@Override

public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

     playButton = (Button) this.findViewById(R.id.Button01);

     playButton.setOnClickListener(this);
}

感谢任何人的帮助。

【问题讨论】:

    标签: android interface instance onclicklistener


    【解决方案1】:

    当您打开新的 Intent 时,Android 框架会为您实例化您的 Activity,这就是为什么您不需要这样做 new ActivityClass,您所要做的就是在您的 AndroidManifest 中声明您的 Activity。

    那么,Test 类的实例在何处/何时创建?

    实例是在“内部”创建的,介于 openIntentonCreate 方法之间。

    【讨论】:

    • 没有书或论坛讨论上述案例。因此,很多Android初学者对“这是引用当前类的对象”感到困惑!
    • 是的,最后一句话是真的,但这并不意味着一定有new :)
    【解决方案2】:

    那么,Test 类的实例在何处/何时创建?

    在调用 public void onCreate(Bundle savedInstanceState) 方法(在你的情况下)因为它的主要活动

    为了更清楚,让我们修改一下你的代码:

    public void onCreate(Bundle savedInstanceState) {
    
         super.onCreate(savedInstanceState);
    
         setContentView(R.layout.main);
    
         playButton = (Button) this.findViewById(R.id.Button01);
    
          OnClickListener clickListener = this; // take current instance
    
         playButton.setOnClickListener(clickListener);
    }
    

    我们通过传递实例来监听事件,将我们的 Activity 注册到监听器。但是我们不希望 setOnClickListener 看到我们所有的方法,所以他们要求我们只提供接口 (OnClickListener)。

    【讨论】:

    • 实际上,setOnClickListener 不会看到 Test 方法,因为它的参数声明为 View.OnClickListener
    • 当然,因为我们只传递接口
    • 嗯仍然没有看到 OnClickListener clickListener = this; 的重点,afaik 将 this 传递给 setOnClickListener 将具有相同的效果。
    • 当您通过this 时,程序员并不清楚您实际通过了什么。有时我会在代码中看到:foo(this, this, this)。我的示例演示了您从当前实例 this 使用的接口并将其传递给侦听器
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多