在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.OnClickListenerActivity接口是必经之路。正如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如果可以在主类中简单地实现内部类并实现,那么这样做的好处是什么,这也可以导致所需的代码清晰和简单。

因此,这只是一个讨论,而不是获得实现

的最佳解决方案,因为如果您与每个人都切合实际,那么您将寻求一种简单且节省内存的解决方案。

所以我更喜欢常规方式。它使事情变得简单高效。检查以下代码:

@Override

public void onClick(View view)

{

switch (view.getId())

{

//handle multiple view click events

}

}

以上是 在Android中实现View.OnClickListener的最佳方法 的全部内容, 来源链接: utcz.com/qa/434985.html

回到顶部