有什么区别:
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;
}
}
}
它们具有完全相同的功能和结果。
答案 0 :(得分:4)
第一种方法使用实现接口方法的匿名内部类。通过使用此方法,您只能接收特定视图的事件。
在第二种方法中,整个Activity类实现OnClickListener
接口。您可以将每个View的OnClickListener设置为this
,并在一个方法中接收所有点击事件,然后您可以在其中过滤它们并对其进行操作。
第一种方法转换为:
Button.OnClickListener anonymous_listener = new Button.OnClickListener() { ... };
button.setOnClickListener(anonymous_listener);
也就是说,当您使用它时,它会动态创建并存储新的OnClickListener
实例。
在第二种方法中,您的整个班级使用OnClickListener
的一个实例,该实例会传递给您想要收听点击的所有视图。