2

有什么区别:

public class MainActivity extends Activity {

    public void onCreate (Bundle savedInstanceState) {
        button1 = (Button) findViewById(R.id.btn1);
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Click code
            }
        )};
    }
}

和:

public class MainActivity extends Activity implements OnClickListener {

    public void onCreate (Bundle savedInstanceState) {
        button1 = (Button) findViewById(R.id.btn1);
        button1.setOnClickListener(this);
    }

    public void onClick(View arg0) {
        switch(arg0.getId()) {
        case R.id.button1:
            // Click code
            break;
        }
    }
}

它们具有完全相同的功能和结果。

4

1 回答 1

3

第一种方法使用实现接口方法的匿名内部类。通过使用这种方法,您只接收该特定视图的事件。

在第二种方法中,您整个 Activity 类都实现了该OnClickListener接口。您可以将每个 View 的 OnClickListener 设置为this,并以一种方法接收所有点击事件,然后您可以在其中过滤它们并对其采取行动。

第一种方法转化为:

Button.OnClickListener anonymous_listener = new Button.OnClickListener() { ... };
button.setOnClickListener(anonymous_listener);

也就是说它会OnClickListener在你使用它时动态地创建和存储一个新的实例。

在第二种方法中,您的整个类使用 的单个实例,该实例OnClickListener被传递给您想要监听点击的所有视图。

于 2013-02-11T12:26:04.447 回答