假设我们有一个活动,其中有很多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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想实现它的方法是在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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样代码看起来更有条理,易于维护.
此外,谈论"Is-a","Has-a"关系,后者似乎是一种很好的做法,因为现在Activity-Subclass与ClickListener有一个"Has-a"关系.虽然在前一种方法中我们会说我们的Activity-Subclass"Is-a"ClickListener,但这并不完全正确.
请注意,我不关心后者会导致的内存开销.
此外,在xml中添加onClick标记完全不可能.
那么,实现ClickListener的最佳方法是什么?
请不要建议像RoboGuice或ButterKnife等任何图书馆.
更新:
我想分享一下我最终采用的方法.
我直接在Activity/Fragment中实现了监听器.
就OOP设计而言.在"HAS-A"的做法并没有提供所有的实际利益,甚至占用更多的内存.考虑到我们将为我们实现的每个类似侦听器创建的嵌套类的数量(以及内存开销),应该明确避免这种方法.
我有一个方法来检测String是否是一个数字:
public static boolean isNumber(String num)
{
return num.matches("(\\p{N})+");
}
Run Code Online (Sandbox Code Playgroud)
上述方法成功匹配英语,印地语,阿拉伯语数字,但无法匹配中文数字:
三十万零二百五十等
是否可以创建一个可以匹配任何语言(或主要语言)的数字的正则表达式?
编辑:该号码不是小数,它将用于验证电话号码.
我目前使用凌空进行网络通话.但是,谷歌似乎没有积极维持凌空.我听说google最初开发使用它作为其Play商店应用程序,但是他们没有在他们使用的第三方库列表中提到它.几乎每个人都使用Retrofit(看看基准,Retrofit似乎更好的选择),是时候退出使用凌空了吗?
ps:请不要发布凌空和改造的利弊
我想MainActivity使用接口与类进行通信。
public interface MyInterface(){
public void doAction();
}
Run Code Online (Sandbox Code Playgroud)
在我的 MainActivity 中我将有这段代码:
public class MainActivity extends AppCompatActivity implements MyInterface(){
//....some more code here
@Override
public void doAction() {
//any code action here
}
//....some more code here
}
Run Code Online (Sandbox Code Playgroud)
所以现在,如果我有另一个类(不是 ACTIVITY),我应该如何正确地在类---接口---mainActivity 之间建立链接?
public class ClassB {
private MyInterface myinterface;
//........
//...... how to initialize the interface
}
Run Code Online (Sandbox Code Playgroud)
我对如何初始化和使用 ClassB 中的接口感到困惑