为多个按钮实现 onTouchListener() 的单一方法

2023-11-25

我想看看是否有一种方法可以创建一个方法来实现多个按钮的触摸侦听器,因为我有很多按钮几乎可以完成相同的操作。他们所做的唯一区别是他们通过我的 sendMessage() 方法发送的消息,以及需要按住按钮多长时间才能发送消息。如果有办法做到这一点,那会是什么?而且,为什么这样的东西不起作用呢?

//Within onCreate Method...
Button mButton = (Button) findViewbyId(R.id.three_sec_button);
mButton = addTouchTimer(mButton, 3, 3);

Calls -

private Button addTouchTimer(Button button, final int sec, final int messageNum){
        button.setOnTouchListener(new View.OnTouchListener() {
            boolean longEnough = false;
            long realTimeLeft = sec * 1000;
            @Override
            // This will make it so that a message is only sent if the button is held down for 3 seconds
            // Otherwise it won't send. It is sent during the hold down process, releasing it returns a false
            // value and no message is sent.
            public boolean onTouch(View arg0, MotionEvent arg1) {
                Log.d("Button", "Touchy Touchy!");
                if(arg1.getAction() == MotionEvent.ACTION_DOWN){
                    buttonPressTime = new CountDownTimer(realTimeLeft, 1000){
                        @Override
                        public void onTick(long millisUntilDone){
                                realTimeLeft = millisUntilDone;
                        }

                        @Override
                        public void onFinish() {  
                            long timeLeft = realTimeLeft;
                            long currTime = System.currentTimeMillis();
                            long realFinishTime = currTime + timeLeft;
                                while(currTime < realFinishTime){
                                    currTime = System.currentTimeMillis();
                                }
                            longEnough = true;
                            sendEmergencyMessage(longEnough, messageNum);
                        }
                    }.start();
                }
                else if(arg1.getAction() == MotionEvent.ACTION_UP){
                    buttonPressTime.cancel();
                    sendMessage(longEnough, messageNum);
                }
                return longEnough;
            }           
        });

        return button;
    }

似乎为了提高效率,必须有一种比为每个按钮实现单独的侦听器更好的方法。请注意,sendMessage() 有一个使用布尔值的 Log 调用,我想看看它被传递时设置的内容。这是在释放按钮期间调用它的唯一原因。


是的,你是对的,还有更好的方法。一个处理所有事情的 TouchListener,通过 id 确定它是哪个按钮。

void intialization(){
     Button m1, m2, m3, m4;
     ... //do initialization stuff
     m1.setId(1);
     m2.setId(2);
     m3.setId(3);
     m4.setId(4);
     MyTouchListener touchListener = new MyTouchListener();
     m1.setOnTouchListener(touchListener);
     m2.setOnTouchListener(touchListener);
     m3.setOnTouchListener(touchListener);
     m4.setOnTouchListener(touchListener);
 }

public class MyTouchListener implements OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(v.getId()){
            case 1:
                //do stuff for button 1
                break;
            case 2:
                //do stuff for button 2
                break;
            case 3:
                //do stuff for button 3
                break;
            case 4:
                //do stuff for button 4
                break;
        }
        return true;
    }

}

你就是这样做的!在这种情况下,id 的数字方法非常有用。另一种方法是让您的活动在您的活动中实现 OnTouchListener,然后您的代码会更简单。

public class MyActivity extends Activity implements OnTouchListener {

    void initialization(){
        Button m1, m2, m3, m4;
        ... //do initialization stuff
        m1.setId(1);
        m2.setId(2);
        m3.setId(3);
        m4.setId(4);
        m1.setOnTouchListener(this);
        m2.setOnTouchListener(this);
        m3.setOnTouchListener(this);
        m4.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(v.getId()){
            case 1:
                //do stuff for button 1
                break;
            case 2:
                //do stuff for button 2
                break;
            case 3:
                //do stuff for button 3
                break;
            case 4:
                //do stuff for button 4
                break;
        }
        return true;
    }

}

注意:此方法也适用于 OnClickListener、OnCheckedChangeListener 或您在 Android 视图上设置的任何其他侦听器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为多个按钮实现 onTouchListener() 的单一方法 的相关文章

  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 带有一、二和三个按钮的 Android 警报对话框

    我不经常发出警报 但每次发出警报时 我都会花一些时间来阅读文档 https developer android com guide topics ui dialogs html并弄清楚如何去做 由于我现在不得不这样做几次 所以我将在下面写一
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • ffmpeg视频已压缩但无法在浏览器中播放

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • Android 服务是否有办法检测设备何时锁定?

    我有一个 Android 服务 我希望在设备锁定时执行操作 我想澄清一下 我对屏幕开 关状态不感兴趣 我知道如何使用带有 Intent ACTION USER PRESENT 和 KeyguardManager inKeyguardRest
  • Android onChange 事件未在 android 5 (Lollipop) 上的 chrome 历史记录的 contentObserver 中触发

    我注意到我的 chrome 历史记录和书签的 contentObservers 在 android lolipop 上不再触发 该代码在旧版本的 android 上完美运行 无论 chrome 版本如何 但在 Lollipop 上它不再运行
  • 如何检查 Android 中连接的 wifi 网络是否处于活动状态

    如何自动检查android中连接的WiFi网络上的互联网是否处于活动状态 我可以检查 wifi 是否已启用或 wifi 网络是否已连接 但我不确定如何检查互联网是否已连接 这可能吗 private boolean connectionAva
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • PhoneStateListener 不调用

    这是我的完整代码 广播示例 java package com example broadcast gt import android app Activity import gt android content Context import
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • 在 KitKat 4.4.2 中获取 SDard 路径和大小

    我在 Google Play 上有一个设备信息应用程序 在该应用程序中我有存储信息 我知道 Android 4 4 在访问外部 SD 卡方面发生了一些变化 内部似乎没有给我带来问题 我的问题是 如何可靠地获取 KitKat 上 SD 卡的大
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android

随机推荐

  • 找不到用于签名配置“调试”的密钥库文件 D\Telegram-master\TMessagesProj\config\release.keystore

    我下载了新版本的 Telegram 当运行它时 出现此错误 Keystore file D Telegram master TMessagesProj config release keystore not found for signin
  • Android HttpClient Cookie

    Android HttpClient 是否可以自动管理 cookie 它确实支持它 阅读下面的帖子 似乎在调用执行时必须传递相同的 HttpContext response httpClient execute httpPost local
  • 不必要的水平滚动条jqGrid

    在我的 jqGrid 使用版本 4 0 0 中 我得到了一个不必要的水平滚动条 但也有一个垂直滚动条 此问题仅出现在 Chrome 和 Firefox 中 但不会出现在 Internet Explorer 中 看起来表格宽度的计算有问题 因
  • Java Swing:实现输入值的有效性检查

    在我的 Swing 应用程序中 用户必须在切换到下一个窗口之前插入数字和值 现在 作为一个干净的程序应该检查每个输入是否有效 如果无效 则会显示错误消息并且不会打开下一个窗口 该检查的结构如下 示例 Button buttonToOpenN
  • 使用 .htaccess 从 URL 中删除 PHP 文件扩展名

    我刚刚在 Ubuntu 12 上安装完 LAMP 堆栈 并遇到了 Apache 的 htaccess 文件的问题 我启用了重写和重定向 mods 并且 htaccess 文件正在工作 如果不存在 www URI 将重定向到 www 但无论我
  • 如何使用 GWT 检查给定的图像 URL 是否存在?

    我想检查给定的 URL 是否存在并且它是一个图像 以便创建一个new Image String url 从中 如果给定的 URL 不是图像 那么它应该返回错误 我一直在寻找同样的东西 我想确定何时未从 URL 加载图像 有一个 ErrorH
  • 如何使用 Angular 动态加载 CSS

    在过去的几天里 我一直在尝试解决这个问题的几个答案 建议和教程 但不幸的是他们都没有成功 最接近的是这样的 https juristr com blog 2019 08 dynamically load css angular cli 但它
  • 如何交换字符串中的两个字符?

    我想写一个函数如下 输入 字符串 A int i 0 输出 将 i 1 处的字符与 i 处的字符交换的字符串 A 什么是clean能够实现这一目标的解决方案 我目前的解决方案是 let mut swapped input str 0 i t
  • React中createStore和createStoreWithMiddleware有什么区别?

    我找到了两种配置 redux createStore 的方法 1 https github com TeamWithBR SampleProjectTodo blob master src store configureStore js 2
  • ASP.NET MVC - 填充下拉列表

    我是 ASP NET MVC 新手 我试图弄清楚如何根据数据库中的值创建基本下拉列表 在 ASP NET Web 表单中 我知道我可以加载如下下拉列表 页面 aspx
  • 检查数组是否有一个或多个空值[重复]

    这个问题在这里已经有答案了 我有数组 var 如果数组中的一个或多个元素为空 我的意思是 字符串是 我想返回 FALSE 我觉得array filter 是更好的方法 但我不知道如何以这种方式过滤它 我该怎么做 函数emptyElement
  • 仅使用内置库使用 Python 制作基本的网络抓取工具 - Python

    学习Python 我试图制作一个没有任何第三方库的网络爬虫 这样这个过程对我来说就不会被简化 而且我知道我在做什么 我浏览了一些在线资源 但所有这些资源都让我对某些事情感到困惑 html 看起来像这样 lots of other div t
  • 有没有一个公式可以将纬度和经度转换为单个数字?

    你能告诉我是否有一个公式可以将纬度和经度转换为单个数字 我计划将其用于提供交付路由的软件中的数据库表 表行将包含该号码以及邮政地址 数据库表将按数字升序排序 以便软件可以找出卡车需要前往第一个 第二个等的地址 请您回复显示 VB 或 VB
  • 如何指定运行脚本的python版本?

    我现在正在使用预装 python 2 7 5 的 mac 学习 python 但我也安装了最新的3 4 我知道如何选择在命令行模式下使用哪个解释器 即 python vs python 3 将调出各自的解释器 但是 如果我只是编写一个包含此
  • 自定义自动隐藏浮动操作按钮行为不起作用

    我试图在 NestedScrollView 向下滚动时隐藏 FloatingActionButton 并在 NestedScrollView 向上滚动时显示自身 这是我的布局
  • 如何内省 Django 中的属性和模型字段?

    我正在尝试获取给定对象的所有现有模型字段和属性的列表 有没有一种干净的方法来内省对象 以便我可以获得字段和属性的字典 class MyModel Model url models TextField def get location sel
  • 将 JTextField 输入转换为 Integer

    我是 JAVA 新手 我试图将 JTextField 的输入转换为整数 我尝试了很多选项 但没有任何效果 Eclipse 总是给我一个错误 并且这些错误对我来说没有意义 导入java awt Graphics 导入java awt Colo
  • 如何访问 MediaBrowserServiceCompat 服务的实例?

    令人惊讶的是 我正在努力获取源自以下内容的服务实例 MediaBrowserServiceCompat 对于典型的服务 为了实现这一点 使用本地绑定器 class MyService extends MediaBrowserServiceC
  • Angular 5 - 在运行时动态加载模块(在编译时未知)

    Angular 5 是否可以动态加载编译时未知但运行时未知的模块 组件 我想这不会使用 webpack 工作 但也许使用 system js EDIT 整个想法是构建一个基于插件的应用程序 其中各个插件被放入插件文件夹中 Angular 将
  • 为多个按钮实现 onTouchListener() 的单一方法

    我想看看是否有一种方法可以创建一个方法来实现多个按钮的触摸侦听器 因为我有很多按钮几乎可以完成相同的操作 他们所做的唯一区别是他们通过我的 sendMessage 方法发送的消息 以及需要按住按钮多长时间才能发送消息 如果有办法做到这一点