假设我们有一个活动,该活动有很多视图OnClickListener要注册。
最常见的实现方法是让Activity-Subclass实现OnClickListener,如下所示:
public class ActivityMain extends Activity implements View.OnClickListener
{
@Override
public void onClick(View view)
{
switch (view.getId())
{
//handle multiple view click events
}
}
}
我喜欢实现它的方式是在Activity-Subclass内部创建一个私有类,并让该内部类实现OnClickListener:
public class ActivityMain extends Activity implements View.OnClickListener
{
private class ClickListener implements View.OnClickListener
{
@Override
public void onClick(View view)
{
switch (view.getId())
{
//handle multiple view click events
}
}
}
}
这样,代码看起来更加井井有条,易于维护。
此外,在谈论“ Is-a”,“ Has-a”关系时,后者似乎是一个好习惯,因为现在Activity-Subclass与ClickListener之间将具有“
Has-a”关系。在前一种方法中,我们会说我们的Activity-Subclass“ Is-a” ClickListener,这并不完全正确。
请注意,我并不担心后者会导致的内存开销。
另外,在xml中添加onClick标记完全没有问题。
那么,什么是实现ClickListener的最佳方法呢?
请不要建议任何类似RoboGuice或ButterKnife之类的库。
更新:
我想分享一下我最终采用的方法。
我直接在Activity / Fragment中实现侦听器。
就OOP设计而言。在 “HAS-A”
的做法并没有提供所有的实际利益,甚至占用更多的内存。考虑到我们将为实现的每个相似侦听器创建的嵌套类的数量(以及内存开销),因此应明确避免使用此方法。