Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OnClick 的另一种书写

OnClick 的另一种书写

原创
作者头像
木子杂志
修改于 2020-08-04 01:55:37
修改于 2020-08-04 01:55:37
8480
举报
文章被收录于专栏:木子杂志木子杂志
前言

在自定义 View 时,每个 view 里面一般都会写一次 OnClick 事件

今天使用另外一种方式将点击事件从我们的 activity 或者自定义 View 中抽取出来

利于 java8 中一个特性 双冒号:: 关键字

:: 关键字

java 8 中:: 关键字可以用来引用类的方法

利于这一点我们用另一个风格写一下 android 中的点击事件

另一种方式书写 OnClick
代码语言:txt
AI代码解释
复制
public class ItemClickHandler {

    public static final View.OnClickListener INSTANCE = ItemClickHandler::onItemClick;

    private static void onItemClick(View v) {

        switch (v.getId()) {
            case R.id.btn_1:
                Toast.makeText(v.getContext().getApplicationContext(), "button1", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_2:
                Toast.makeText(v.getContext().getApplicationContext(), "button2", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_3:
                Toast.makeText(v.getContext().getApplicationContext(), "button2", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

}

这样我们就可以实现在一个地方定义,别处使用

代码语言:txt
AI代码解释
复制
public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        findViewById(R.id.btn_1).setOnClickListener(ItemClickHandler.INSTANCE);

    }
}

public class NavigationView extends RelativeLayout {

    protected void bindClick() {
        findViewById(R.id.btn_2).setOnClickListener(ItemClickHandler.INSTANCE);
    }
}


public class BottomView extends RelativeLayout {

    protected void bindClick() {
        findViewById(R.id.btn_3).setOnClickListener(ItemClickHandler.INSTANCE);
    }
}
出处

【packages/apps/Launcher3/src/com/android/launcher3/touch/ItemClickHandler.java】

【---> ItemClickHandler.java】

代码语言:txt
AI代码解释
复制
/**
 * Class for handling clicks on workspace and all-apps items
 */
public class ItemClickHandler {

    /**
     * Instance used for click handling on items
     */
    public static final OnClickListener INSTANCE = ItemClickHandler::onClick;

    //点击事件
    private static void onClick(View v) {
        // Make sure that rogue clicks don't get through while allapps is launching, or after the
        // view has detached (it's possible for this to happen if the view is removed mid touch).
        if (v.getWindowToken() == null) {
            return;
        }

        Launcher launcher = Launcher.getLauncher(v.getContext());
        if (!launcher.getWorkspace().isFinishedSwitchingState()) {
            return;
        }

        Object tag = v.getTag();
        if (tag instanceof ShortcutInfo) {
            onClickAppShortcut(v, (ShortcutInfo) tag, launcher);
        } else if (tag instanceof FolderInfo) {
            if (v instanceof FolderIcon) {
                onClickFolderIcon(v);
            }
        } else if (tag instanceof AppInfo) {
            //点击 icon 启动应用
            startAppShortcutOrInfoActivity(v, (AppInfo) tag, launcher);
        } else if (tag instanceof LauncherAppWidgetInfo) {
            if (v instanceof PendingAppWidgetHostView) {
                onClickPendingWidget((PendingAppWidgetHostView) v, launcher);
            }
        }
    }
  //...
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Launcher启动过程
系统启动的最后一步就是启动一个程序来显示系统中已经安装的应用程序,这个程序就是Launcher,Launcher在启动过程中会请求PackageManagerService返回系统中已经安装的应用程序信息,并将这些信息封装成一个快捷图标显示在系统屏幕上,这样用户就可以通过点击这些快捷图标来启动相应的应用程序。
八归少年
2024/02/25
3550
android控件大全及用法_学双人舞一步一步教学
GridView 用于显示二维滚动网格的View。同ListView一样,他的数据项也是从ListAdapter中产生。关于他的使用方法可参见官网的示例GridView 。
全栈程序员站长
2022/11/15
4160
Android之按钮点击事件(单击、双击、长按等)
在布局文件中添加按钮点击事件 1、在xml文件中 为 Button 添加android:onclick属性
程思扬
2023/07/24
3.1K0
android listview添加headview
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163272.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
4980
笔记31 | 归纳总结Android的点击事件
地址 http://blog.csdn.net/xiangyong_1521/article/details/78489254 目录 常见按钮点击 点击的其他方式 对话框按钮点击 列表点击 物理键点击 附 ---- ---- 1. 常见按钮点击 a、单击事件,主要用于Button和ImageButton控件,布局视图与TextView、ImageView控件用的也比较多。相关类名与方法说明如下: 监听器类名 : View.OnClickListener 设置监听器的方法 : setOnClickListe
项勇
2018/06/19
1.7K0
《Monkey Android》第6课点击事件的四种写法
我们在“Button”上按住“ctrl”键,并点击鼠标左键,跟踪到Button的源码类,发现它是继承于TextView,继续跟踪,发现TextView继承于View。实际上,Android中所有可视控件都是继承自View。
GitOPEN
2019/01/29
6960
一个Activity向另外一个Activity传递值的方法
1.关键代码 假如FirstActivity要向SecondActivity传递值
Aidol
2020/07/23
8240
一个Activity向另外一个Activity传递值的方法
从0系统学Android--3.6 RecyclerView
首先说明一点昨天发了一篇关于 ListView 的使用入门文章,得到了大家的一致调侃。我的想法是这样的,虽然现在 ListView 已经被 RecyclerView 替代了,但是本系列作为入门系列,力求内容完整!还是有必要提及一下这么重要的控件的,谁能保证老的项目没有 ListView 呢?
开发者
2019/12/26
9670
从0系统学Android--3.6 RecyclerView
一键退出程序
新建一个ActivityCollecter类做为活动管理器 public class ActivityCollector { public static List<Activity> activities = new ArrayList<>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeAct
Aidol
2020/07/23
9000
常用控件之Button详解
小伙伴们肯定都有在玩儿一些游戏,比如和平精英,在界面上展示的名字,其实就是Android中咱们上一篇介绍到的TextView控件。而今天,我们再给大家带来一个非常好玩儿的控件,这个控件可以结合咱们之前的讲到的内容做很多有趣的事情~
下码看花
2019/09/02
1.5K0
常用控件之Button详解
android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等,各个布局可以嵌套的。本文的布局文件就是线性布局的嵌套
用户4148957
2022/06/14
1.5K0
android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
开发时遇到监听的事件处理机制和SoundPool播放音效解决方法以及外部类的使用【Android】
事件侦听器机制是一种委托的事件处理机制。事件源(组件)事件处理被委托给事件侦听器。当指定的事件发生在事件源中时,将通知事件侦听器执行相应的操作 重写点击事件的处理方法onClick()
上进小菜猪
2022/12/27
1.6K0
开发时遇到监听的事件处理机制和SoundPool播放音效解决方法以及外部类的使用【Android】
Android开发基础:布局,监听以及一些基础知识
android:layout_width/android:layout_height可选参数
小王不头秃
2024/06/19
2010
Android自定义View之TitleBar,通用标题栏
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/49387481
Hankkin
2018/09/06
1.7K0
笔记17 | 复习AlertDialog(对话框)示例
前言 本节给大家带来是显示提示信息的第三个控件AlertDialog(对话框),查看源码知道是Dialog的子类!ProgressDialog,TimePickerDialog父类等。另外,会发现构造方法是保护的,如果我们要创建AlertDialog的话,我们需要使用到该类中的一个静态内部类:public static class Builder,然后来调用AlertDialog里的相关方法,来对AlertDialog进行定制,最后调用show()方法来显示我们的AlertDialog对话框!好的,下面我们
项勇
2018/06/19
6850
RecyclerView的简单使用在activity和fragment中
主要就是activity和recycview,recycview和adapter;
zhangjiqun
2024/12/16
2390
相关推荐
Launcher启动过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档