文档章节

快速设置点击事件的工具类

Reone的开发笔记
 Reone的开发笔记
发布于 2017/02/05 18:36
字数 489
阅读 7
收藏 0

有些view不值得用一堆代码去设置点击事件

使用这个工具类的好处: 

1.通过initView方法,可以快速设置一个点击事件(或者长按事件);

2.只有一个事件监听类;

3.用map替代switch case,在执行事件时更快;

4.可以统一处理整个app中的点击事件(或者长按事件).

import android.app.Activity;
import android.view.View;

import java.util.HashMap;

/**
 * Created by wangxingsheng on 2017/2/5.
 *
 * 快速设置点击事件的工具类
 *
 */

public class ViewListenerHelper{

    private static HashMap<Integer,ClickListener> mClickMap = new HashMap<>();
    private static HashMap<Integer,LongClickListener> mLongClickMap = new HashMap<>();
    private static OnClickListener mOnClickListener = new OnClickListener();
    private static OnLongClickListener mOnLongClickListener = new OnLongClickListener();

    /**
     * 快速设置view点击事件,所有使用此方法设置的点击事件,公用一个事件监听类
     * @param parentView
     * @param viewId
     * @param oneListener
     */
    public static View initView(View parentView, int viewId, ClickListener oneListener){
        View view = parentView.findViewById(viewId);
        view.setOnClickListener(mOnClickListener);
        mClickMap.put(viewId,oneListener);
        return view;
    }

    /**
     * 快速设置view点击事件,所有使用此方法设置的点击事件,公用一个事件监听类
     * @param activity
     * @param viewId
     * @param oneListener
     */
    public static View initView(Activity activity, int viewId, ClickListener oneListener){
        View view = activity.findViewById(viewId);
        view.setOnClickListener(mOnClickListener);
        mClickMap.put(viewId,oneListener);
        return view;
    }

    /**
     * 快速设置view长按事件,所有使用此方法设置的点击事件,公用一个事件监听类
     * @param parentView
     * @param viewId
     * @param oneListener
     */
    public static View initView(View parentView, int viewId, LongClickListener oneListener){
        View view = parentView.findViewById(viewId);
        view.setOnLongClickListener(mOnLongClickListener);
        mLongClickMap.put(viewId,oneListener);
        return view;
    }

    /**
     * 快速设置view长按事件,所有使用此方法设置的点击事件,公用一个事件监听类
     * @param activity
     * @param viewId
     * @param oneListener
     */
    public static View initView(Activity activity, int viewId, LongClickListener oneListener){
        View view = activity.findViewById(viewId);
        view.setOnLongClickListener(mOnLongClickListener);
        mLongClickMap.put(viewId,oneListener);
        return view;
    }

    private final static class OnClickListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            mClickMap.get(v.getId()).onClick(v);
        }
    }
    public interface ClickListener{
        void onClick(View v);
    }

    private final static class OnLongClickListener implements View.OnLongClickListener{
        @Override
        public boolean onLongClick(View v) {
            mLongClickMap.get(v.getId()).onLongClick(v);
            return true;
        }
    }
    public interface LongClickListener{
        void onLongClick(View v);
    }
}

 

可以这样使用

        cameraBtn = ViewListenerHelper.initView(this, R.id.camera_permission_btn, new ViewListenerHelper.ClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

 

© 著作权归作者所有

Reone的开发笔记
粉丝 6
博文 70
码字总数 29350
作品 0
松江
程序员
私信 提问
【Android】快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/53618694 本文出自:【张旭童的博客】(http://blog.csdn.net/zxt06...

zxt0601
2016/12/14
0
0
安卓开发框架(MVP+主流框架+基类+工具类)--- ButterKnife

《安卓开发框架》系列文章 >>> 学习/参考地址: http://www.jianshu.com/p/9ad21e548b69 http://www.cnblogs.com/zhaoyanjun/p/6016341.html 前言 ButterKnife是一个View注入的框架,它使用注......

JYcoder
2017/10/27
0
0
你真的会使用Chrome开发者工具吗?

原文:How to use Chrome DevTools like a Pro,译者:paullbyao Chrome开发工具是一个Web开发者的利器,使用她你可以实现: 管理界面元素 断点调试JavaScript代码 优化你的代码 这里将列出一...

zyt_1978
2016/07/03
17
0
Android QuickSetting---手电筒控制

今天遇到问题 打开手电筒,再进入相机下拉通知栏中有手电筒已开启的提示。现总结与手电筒相关的知识点。 在下拉通知栏打开手电筒的代码位于“frameworks/base/packages/SystemUI/src/com/and...

天王盖地虎626
02/15
14
0
自定义选项卡实战swift(内附源码且精讲知识点)

App开发本质上是一种对人性的把握,我们在项目开发过程中经常需要自定义很多精美的控件,以此来获得更好的用户体验。 因此,掌握自定义控件是移动应用开发必备的一项技能。本篇文章我们就来快...

充电实践
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自定义ApiBoot Logging链路以及单元ID生成策略

ApiBoot Logging会为每一个请求都对应创建链路编号(TraceID)以及单元编号(SpanID),用于归类每一次请求日志,通过一个链路下日志单元的Parent SpanID可以进行上下级关系的梳理。 前文回顾...

恒宇少年
22分钟前
8
0
浅谈 Application 和 activity

对于 在 Application初始化一些变量,为什么不可以放在activity 或者其他的组件里呢? 这里就根据个人的理解来讲述一下,欢迎补充指正。 首先 activity 是以栈的形式出现,一个app应用会有多...

MrLins
22分钟前
8
0
Allegro的脚本文件内容里都有哪些

小伙伴们在使用Allegro的时候是否经常用到脚本文件夹呢?scr的用法其实可真不简单。。。 首先脚本文件的运行模式就存在很多种,比如不提示错误信息,不弹出确认对画框(这样很有利于我们执行...

demyar
23分钟前
16
0
微信升级外链管理规范,「砍一刀帮我加速」要被禁止了

原创: 蒋鸿昌 首发:「知晓程序」公众号 - 最好的微信新商业媒体 几天前,知名互联网评论人阑夕模仿皮尤研究中心(Pew Research Center)在美国做的互联网通识调查问卷,做了一份中文版问卷...

知晓云
24分钟前
14
0
CentOS 7接投影仪

我将一台安装着CentOS 7图形界面的惠普笔记本电脑当桌面使用。最近,想要连接投影仪时却遇到了问题。笔记本有一个HDMI接口。我买了一个HDMI---->VGA的转接线,连上笔记本电脑后,屏幕一直在闪...

大别阿郎
28分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部