这很简单:你所做的只是创建一个类。对于 JVM(或本例中的 dalvik),类是它自己的编译单元(文件)、内部类还是匿名类(*)都没有关系。所以你有三个同样有效的选择:
选项 1您的示例:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
选项 2命名内部类:
public MyActivity extends Activity {
static class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// do something
}
}
....
button.setOnClickListener(new MyListener());
}
和选项 3不同的文件:
文件 MyListener.java
public class MyListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// do something
}
}
文件 MyActivity.java
import MyListener.java
public MyActivity extends Activity {
....
button.setOnClickListener(new MyListener());
}
您使用这些选项中的哪一个完全是主观的 - 根据您的需求和使用情况,一个或另一个更有意义。但是,通常在 UI 侦听器中,您不希望有任何与您正在编程的 Activity 的逻辑脱节的逻辑。因此,您使用匿名类,因为所有代码都保存在一个地方并使其具有良好的可读性。