小编Sar*_*tal的帖子

在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
        }
    }
}
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"的做法并没有提供所有的实际利益,甚至占用更多的内存.考虑到我们将为我们实现的每个类似侦听器创建的嵌套类的数量(以及内存开销),应该明确避免这种方法.

java android

41
推荐指数
4
解决办法
7万
查看次数

用于匹配多语言数字的正则表达式,不检测中文数字

我有一个方法来检测String是否是一个数字:

public static boolean isNumber(String num)
{
    return num.matches("(\\p{N})+");
}
Run Code Online (Sandbox Code Playgroud)

上述方法成功匹配英语,印地语,阿拉伯语数字,但无法匹配中文数字:

三十万零二百五十等

是否可以创建一个可以匹配任何语言(或主要语言)的数字的正则表达式?

编辑:该号码不是小数,它将用于验证电话号码.

java regex

6
推荐指数
1
解决办法
834
查看次数

Android Volley死了吗?

我目前使用凌空进行网络通话.但是,谷歌似乎没有积极维持凌空.我听说google最初开发使用它作为其Play商店应用程序,但是他们没有在他们使用的第三方库列表中提到它.几乎每个人都使用Retrofit(看看基准,Retrofit似乎更好的选择),是时候退出使用凌空了吗?

ps:请不要发布凌空和改造的利弊

android android-volley

2
推荐指数
1
解决办法
1266
查看次数

类和活动之间通过接口进行通信

我想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 中的接口感到困惑

android interface

2
推荐指数
1
解决办法
3204
查看次数

标签 统计

android ×3

java ×2

android-volley ×1

interface ×1

regex ×1