Mt.*_*ers 14 java android event-handling
我知道这似乎是一个重复的问题,但我真的无法找到相关主题的好答案.
关于什么是处理OnClick事件的最佳方式,有很多问题Button.
以下是我遇到的一些选项:
OnCreate方式定义侦听器:button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
android:OnClick在XML上设置属性:<Button android:id="@+id/btnDelete"
...
android:OnClick="btnDelete_OnClick"/>
Run Code Online (Sandbox Code Playgroud)
OnClickListener在Activity类上实现接口并将自引用传递给Button:public class MainActivity extends Activity implements OnClickListener{
@Override
public void onClick(View v) {
//do stuff
}
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(this);
}
}
Run Code Online (Sandbox Code Playgroud)
OnClickListener类型为的字段:private OnClickListener onClickHandler = new OnClickListener(){
@Override
public void onClick(View v) {
//stuff
}
};
protected void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(onClickHandler);
}
Run Code Online (Sandbox Code Playgroud)
说到a Button和OnClick事件,我总是喜欢在XML上定义它,它更干净.
但是其他事件如OnItemClick来自ListView或OnTimeSet来自TimePickerDialog?我没有看到在XML上设置它的属性.我认为实现Listener接口是一个非常干净的解决方案,但这意味着我只能实现一次,如果我有两个相同的视图,我将不得不在同一个地方处理它们的事件.如果我使用选项2或4,当从UI处理来自不同视图的多个事件时,它可能会变得非常混乱.
如果事件处理有任何其他实施选项,我想看到关于这个主题的其他意见.真的有一种替代方案可以被定义为更好的方案,还是只是每个程序员的个人事务?
处理 Button 的 OnClick 事件的最佳方法取决于以下几点:
1. 您拥有的按钮数量。
答:如果您只有一个按钮,您可以使用第一种方法创建匿名类。但如果你有多个按钮,那么创建多个匿名 onClicklistener 就不好了。但要选择其他选择
2.内存优化
Ans:如果您在 Activity 类上实现 OnClickListener 接口并向 Button 传递自引用,则 onclick 侦听器将保留对该活动对象的引用,因此将整个活动的对象保留在其中会很繁重,因此在此具有 OnClickListener 类型的局部变量的方式是更优化的方式。
因此,总的来说,最佳实践是创建一个具有 OnClickListener 类型的局部变量,这是处理任何类型事件的最佳方法,而不仅仅是 Button 上的 onClick 事件。