在Android中实现View.OnClickListener的最佳方法
假设我们有一个活动,该活动有很多视图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设计而言。在
的做法并没有提供所有的实际利益,甚至占用更多的内存。考虑到我们将为实现的每个相似侦听器创建的嵌套类的数量(以及内存开销),因此应明确避免使用此方法。
回答:
首先,Android没有定义有关注册点击侦听器的最佳实践。这完全取决于您的用例。
实现View.OnClickListener
Activity接口是必经之路。正如Android强烈建议一遍又一遍的实现接口,无论它是Activity还是Fragment。
现在就像您描述的那样:
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
}
}
}
}
这是您的方法。现在,这是您的实现方式,如果您不关心内存开销,那么这没什么问题。但是,View.OnClickListener
如果可以在主类中简单地实现内部类并实现,那么这样做的好处是什么,这也可以导致所需的代码清晰和简单。
因此,这只是一个讨论,而不是获得实现
的最佳解决方案,因为如果您与每个人都切合实际,那么您将寻求一种简单且节省内存的解决方案。
所以我更喜欢常规方式。它使事情变得简单高效。检查以下代码:
@Overridepublic void onClick(View view)
{
switch (view.getId())
{
//handle multiple view click events
}
}
以上是 在Android中实现View.OnClickListener的最佳方法 的全部内容, 来源链接: utcz.com/qa/434985.html