为多个按钮实现 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() 的单一方法 的相关文章

  • 新的 Material Design 底部导航应使用哪个视图? [复制]

    这个问题在这里已经有答案了 我相信你们都听说过添加底部导航 https www google com design spec components bottom navigation html材料设计指南 我计划将其添加到我的应用程序中 但
  • 移动网站 Facebook 使用 Facebook App 登录以获取登录详细信息

    使用网络浏览器 例如Android 上的 Chrome 如果移动网站要求用户登录 Facebook 而用户没有登录 则即使手机可能通过 Facebook 本机应用程序登录 Facebook 浏览器也会要求用户提供登录详细信息 有没有什么方法
  • Android ImageButton 在 Activity 中运行良好。它在片段中不起作用

    我正在尝试转换布局 使其包含片段 其中一个视图是具有侦听器的 ImageButton 该代码作为 Activity 运行良好 但作为 Fragment 会出现麻烦 第一个问题是我无法使用 findViewById 但我能够在这里找到答案并使
  • android 网格视图从右到左放置项目

    我正在开发一个 Android 应用程序阿拉伯文版本 在其中一个界面中 我有 gridView 因此 要以正确的顺序显示项目 我必须从右到左显示 GridView 中的项目 当然是从上到下 为此 我尝试在 GridView 中添加这些属性
  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • 当用户将 Android 11 应用程序置于后台时,除非手机已连接电源,否则我的 Android 11 应用程序将停止运行

    我编写了一个前台服务 以确保我的应用程序在进入后台时可以继续运行 该应用程序需要在后台运行 因为在计时器到期后 它会发出声音并振动以提醒用户 但是 当按下电源或主页按钮时 应用程序的计时器将在大约 15 分钟后停止运行 除非手机已插入电源
  • Android - 如何获取文本视图中字符的坐标

    是否可以从 Android 中的 TextView 中的字符获取 x 坐标 我不是在寻找 TextView 本身的坐标 我需要 TextView 中最后一个字符的坐标 多行 提前致谢 Java解决方案 以下是如何获得x and y特定字符的
  • 为什么 Cursor.requery() 被标记为“已弃用”?

    Cursor requery 是一种非常常见的方法 使用它来刷新 ListView 的内容 但为什么这个方法被标记为 已弃用 呢 我不太清楚 API 文档上的原因 Cursor requery API http developer andr
  • XmlPullParser 异常 - 无法解决

    我有一个基本方法 ReadXML 从资产文件夹中读取 xml 文件 运行时不会引发任何异常 但在这个方法中 我调用了 doXML 方法 该方法尝试从 xml 文件中提取文本并将该文本设置到文本视图中 当 doXML 方法运行时 我不断收到以
  • Android - 如何在 ListView 的背景上显示垂直线(并根据行高)?

    如何在背景上显示一条垂直线 如下图蓝色突出显示的那条 在此示例中 我有一个带有 ImageView 元素的 ListView 和 TextView 但它与线条无关 并且我希望这些项目的背景上有一条垂直线 让人感觉它们与每个项目 连接 另请注
  • Firebase 云消息传递 - 目标到 Firebase 控制台中不可见的单个设备

    我正在尝试向 android 中的单个设备发送通知 但是当我从 Firebase 控制台执行此操作时 它在 Firebase 新视图中不可见 谁能帮助我从哪里向单个设备发送通知 仔细尝试以下步骤 Tap 新通知 Fill up 通知标题 可
  • Android Studio,工具提示消失得这么快

    我有以下问题 我想从这个工具提示中复制错误文本 但是一旦我将鼠标悬停在它上面 它就消失得如此之快 这让我发疯 我有以下 android studio 版本 我有以下设置 谢谢您的帮助 如果有人遇到这个问题 这与logcat刷新的方式有关 每
  • 没有 GUI 的 Android Activity

    我创建了一个仅从链接启动的活动 使用意图过滤器 我不希望此活动有 GUI 我只希望它启动服务并在栏中放置通知 我尝试将链接的意图过滤器放入我的服务中 但这不起作用 有没有更好的方法可以响应意图过滤器 或者我可以让我的活动没有 GUI 吗 抱
  • 如何使用Multipart将图像上传到php服务器

    我一直很头疼 如何将图像上传到服务器 这对我来说是新任务 但对我来说很困惑 我在 stackoverflow 上搜索并用谷歌搜索 但我遇到了问题 我的意图是从 SD 卡上传照片并从相机拍照并上传到服务器 在ios中 这个任务已经完成 在io
  • 在 Android 模拟器中获取互联网连接

    我有一台带有wifi连接的台式电脑 我的IP地址是192 168 12 95 网关是192 168 10 10 但是我在android模拟器中没有获得互联网连接 也就是说我无法访问internate 我也尝试过 emulator avd w
  • 从前台服务的活动中释放内存

    我有一个带有前台服务和一项活动的应用程序 该服务可以在启动时自行启动 也可以从 Activity 中启动 我注意到当服务在启动时自行启动时 内存使用量约为 3MB 一旦我打开该 Activity 内存使用量就会跃升至约 9mB 一旦 Act
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • 找不到R类

    当我打开 Eclipse 时 R class在我的项目中消失了 为什么 我有 eclipse juno 和最新版本的 android SDK The R class不会重新生成 因为代码中有错误 我怎么解决这个问题 Try Project
  • 未捕获的引用错误:cordova 未定义

    这是我的 HelloPlugin js 文件 var HelloPlugin callNativeFunction function success fail resultType return cordova exec success f
  • 如何找出每个包含的库的最低 api 级别

    我的项目中包含了很多库 Android Studio 2 0 Preview 4 我想找出它们每个的最低 Android SDK 级别 是否可以不用谷歌搜索每个图书馆的信息 如果您有源形式的库 例如 作为项目中的库模块 请查看其清单 如果您

随机推荐

  • 找不到用于签名配置“调试”的密钥库文件 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 方法发送的消息 以及需要按住按钮多长时间才能发送消息 如果有办法做到这一点