当我在文本框中输入一些文本时,OnKey 事件被调度两次。如何预防?

2024-01-31

在我的调试过程中,我发现发生了一件奇怪的事情。我有一个EditText我将当前活动定义为OnKeyListener在用户键入时执行验证。

Code

txtPhoneNumber.setOnEditorActionListener(this);
txtPhoneNumber.setOnKeyListener(this);
txtPhoneNumber.setOnFocusChangeListener(this);

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    String phoneNumber = ((TextView) v).getText().toString();
    if (phoneNumber != null && !"".equals(phoneNumber))
        setValidPhoneNumber(checkValidPhoneNumber(phoneNumber));

    setForwardButtonEnabled(this.validPhoneNumber && this.readyToGo);

    if (actionId == EditorInfo.IME_ACTION_DONE) {
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        in.hideSoftInputFromWindow(v.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }

    return false;
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

    String phoneNumber = ((TextView) v).getText().toString();
    if (phoneNumber != null && !"".equals(phoneNumber))
        setValidPhoneNumber(checkValidPhoneNumber(phoneNumber));

    setForwardButtonEnabled(this.validPhoneNumber && this.readyToGo);

    return false;
}

好吧,我可以承认,当用户按下 Enter 键时再次执行验证是相当多余的,而不仅仅是关闭软键盘。但是我发现 OnKey 事件被调度两次。

例如我正在写3551234567我已经输入了355。当我按 1 时,会触发一个事件v.getText() = 355接下来另一个事件有v.getText() = 3551.

我想知道这是否正常,以及是否可以通过区分这是“preOnKeyEvent”还是“postOnKeyEvent”来避免这种情况。我只需要字符串after事件,而不是before.

谢谢


您可能会同时收到按键按下/按键抬起事件。

尝试通过检查 KeyEvent 的操作是否有 ACTION_UP 操作来过滤您的方法。

Read this http://developer.android.com/reference/android/view/KeyEvent.html了解更多信息

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

当我在文本框中输入一些文本时,OnKey 事件被调度两次。如何预防? 的相关文章

  • 检查片段是否存在并重用它

    每次用户单击列表视图中的项目时 我都会使用以下代码创建一个片段 但通过这种方式 片段是在每次用户点击时创建的 我想要的是重用旧片段 如果存在 并仅重新加载其内容 不创建新片段 MagazineViewFragment fragment ne
  • Android GooglePlayServicesUtil.getErrorDialog() 不显示对话框

    我正在尝试检查是否可用Google Play 服务 APK在使用它之前 我有一个 软件包已过期的设备 日志显示 Google Play 服务已过时 需要 3225100 但找到 3136134 下面的代码将处理这种情况并显示一个对话框 提示
  • 在 Android 库项目中禁用 Crashlytics 进行调试

    我有一个包含多个模块的项目 模块的公共代码位于库模块中 问题是我们最近将 Crashlytics 添加到了我们的项目中 在库模块中 即使我们处于调试模式 我们也会不断收到错误报告 我在网上搜索了一下 发现库总是被视为Release模式 现在
  • 如何创建轮播ViewPager?

    我想做的只是 Android 中的水平轮播 如果我有 3 个屏幕 A B 和 C 那么我希望我的 ViewPager 允许我像这样移动 A B B C C A GTalk for Android 的对话可以这样切换 三星的主屏幕和应用程序屏
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • 如何在Android中创建类似架子的视图?

    如何在android中创建一个类似书架的视图 在任意行中显示多本书 此外 它应该具有像 Moon reader 应用程序那样的水平和垂直功能 我可以编写一个水平移动的架子视图 但它不能完全工作 我使用 xml 文件来查看包含图像 文本和按钮
  • 如何将弹出菜单项的方向从右向左更改?

    我知道这个问题被问了很多次 我使用了很多解决方案 但它对我不起作用 我想改变我的方向Menu to rtl用一个Popup但它不起作用 my menu menu menu
  • Android studio 3.0不生成签名的apk

    将 android studio 更新到版本 3 0 Windows 后 我无法生成签名的 APK 构建完成后 我收到消息 单击 查找 会将我带到 APP 文件夹 但找不到 APK 改变了什么 自Android Studio 3 0更新后
  • NanoHTTPD 如何将上传的文件保存到SD卡文件夹

    如何将上传的文件保存到SD卡文件夹 目前它存储到 data data cache文件夹 文件名如 NanoHTTPD 一些随机数 我无法将其复制到 SD 卡中的任何文件夹位置 我想将文件保存到 SD 卡中前面提到的文件夹位置 其名称与从我的
  • 如果使用键盘,如何捕获 TimePicker 中的时间变化?

    我有一个小部件 它是一个 TimePicker 用于检索数据库字段中保存的时间 问题是 当用户更改小部件中的时间值时 这不会保存在数据库中 所以我遇到了setOnTimeChangedListener如果您只在小部件中使用加号和减号 那么该
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • VS Code:无法安装以下 Android SDK 包,因为某些许可证尚未被接受

    我想做的是使用 VS Code 构建我的 flutter 应用程序 当我运行以下命令时flutter build apk FAILURE Build failed with an exception Where Build file F y
  • Android Fabric Crashlytics 崩溃,初始化时未找到资源

    我从 google play 控制台收到了这份报告 看起来 Fabric 在启动时崩溃了 因为某些用户出现了资源未找到的异常 java lang RuntimeException at android app ActivityThread
  • 如何使用Gson将JSONArray转换为List?

    在我的 Android 项目中 我试图将收到的 JSONArray 转换为列表 在 的帮助下这个答案 https stackoverflow com questions 8371274 how to parse json array in
  • Android:调用超类的原因?

    我正在查看 Android 开发人员网站上的记事本教程 我有一个关于调用活动超类的重写函数的问题 例如 public class Notepadv3 extends ListActivity Override public boolean
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • Android动态功能模块,找不到资源

    当下载的功能模块发布到 Play 商店时 我在启动活动时遇到问题 它总是在下载模块活动中的 setContentView 上崩溃 java lang RuntimeException Unable to start activity Com
  • 如何在Android手机上而不是模拟器上运行或调试?

    Android 模拟器速度太慢 无法测试运行的应用程序 有没有办法使用 IDE 而不是模拟器在真实手机上调试 运行应用程序 通常 您可以在手机上打开 USB 调试 然后通过 USB 将其连接到 PC 然后 手机将以与模拟器相同的方式出现在

随机推荐

  • Fluent合并到main.exe后出现问题

    我的问题是关于Fluent http fluent codeplex com 我将其与我的合并program exe在一个 merged exe 中使用以下代码 public class Program STAThreadAttribute
  • 正则表达式搜索包含 (?:.|\s)*? 的模式需要越来越长的时间

    我的正则表达式匹配时间越来越长 第五次大约 30 秒 但需要应用大约 500 轮匹配 我怀疑这是灾难性的回溯 请帮忙 我如何优化这个正则表达式 String regex tr s td width quot 20 quot b s b td
  • 从 Jenkins 的 credential.xml 中提取密码

    我已向 Jenkins 添加了 SSH 凭据 不幸的是 我忘记了 SSH 密码 现在想从 Jenkins 的凭证存档中获取它 该存档位于 JENKINS HOME credentials xml 该 XML 文档似乎具有在 XML 标签中加
  • 如何用 Google 测试捕获断言?

    我正在使用 Google 测试框架编写一些单元测试 但我想检查一些断言是否放置得当并且有用 有没有办法在 Google 测试中捕获断言 测试中的示例代码 int factorial int n assert n gt 0 然后是测试 inc
  • mvc路由生成iis 7.5错误禁止

    我的 WebApplication 我在这里有一个 ASPX WebForms 页面 ASPWebforms MyFolder Default aspx 如果我使用这段代码 public static void RegisterRoutes
  • 获取msoFileDialogFolderPicker的初始路径

    我正在开发的应用程序要求用户使用 msoFileDialogFolderPicker 选择一个文件夹 并且它在最后一个位置打开文件夹选择器非常有用 但是 我们的用户偶尔会更改路径中的文件夹名称 这会导致 Windows 出现 位置不可用 对
  • 在生产模式下出现“开发”错误

    我遇到了一个奇怪的问题 我在生产模式下运行服务器 一切都很好 但我不断收到错误消息 就像它们在开发模式下出现一样 例如 我得到的不是 404 页面 而是 没有路由与 method gt get 匹配 foo 异常通知程序 也停止发送异常 我
  • Htaccess 301 博客重定向 url

    我在我的实时网站上进行了 301 重定向 类似于此 urlhttps www rosterelf com support detail 1424 how can i copy shifts from a day to another到这个网
  • 使用 Android SDK,我在 JPEG 中看不到任何 EXIF

    我正在使用android hardware Camera类拍照 我发现图像中根本没有存储 exif 数据 如果我在 DROID 上使用相机应用程序 所有 exif 数据都会被保存 我尝试使用 Set 和 SetRotation 设置旋转 看
  • 使用 PHP 从字符串中获取数字

    我有字符串 one foo bar 4 baz 5 qux quux two bar baz 2 bar three qux bar 12 quux 3 foo four foo baz 3 bar 13 quux foo 如何找到这些字符
  • Amazon Emr - 当我们拥有核心节点时,任务节点需要什么?

    我最近在学习Amazon EMR 据我所知 EMR集群让我们选择3个节点 Master 运行主要 Hadoop 守护进程 如 NameNode 作业跟踪器和资源管理器 运行 Datanode 和 Tasktracker 守护进程的核心 仅运
  • 为什么ajax调用后页面会刷新

    我有一个活动 如果它是模糊的 那么页面不会刷新 但如果它是点击事件 那么页面就会重新加载 到底是什么原因呢 weeklygeneratebtn on click function store name on blur function va
  • 有没有办法在 Android SDK 模拟器中获取可复制粘贴的调试输出?

    我在 Android 模拟器中生成了一些信息 我能看到获取它的唯一方法是使用 Log 类 但是 您无法从 DDMS 日志窗口进行复制和粘贴 这真的很烦人 因为我无法在另一个应用程序中使用该信息 例如 如果不重新输入它 有没有更好的方法从模拟
  • 如何从 Microsoft Office 2007 保存 ImageMSO 图标?

    我从 Microsoft Office 2007 中发现了很多漂亮的图标 您知道如何使用 VBA 将所有图标提取并保存为 PNG 文件吗 部分图像MSO http rabu4g bay livefilestore com y1p2SF1q6
  • 刚创建数据库后,无法以 root 身份访问该数据库

    作为 root localhost mysql gt CREATE USER aaa Query OK 0 rows affected 0 00 sec mysql gt GRANT USAGE ON TO aaa WITH MAX QUE
  • 何时使用属性和方法?

    我是来自 C 的 NET 世界的新手 我正在尝试更好地理解属性 我注意到 Microsoft 在 NET 框架中到处都使用了属性 使用属性比创建 get set 方法有优势吗 是否有关于何时应使用属性的通用准则 以及命名约定 它是纯粹的语法
  • 在 C++ 中创建 Windows 命名管道

    我正在尝试在 C Windows 中创建两个进程之间的简单通信 就像 Linux 中的 FIFO 一样 这是我的服务器 int main HANDLE pipe CreateFile TEXT pipe Pipe GENERIC READ
  • 打开 Thread Sanitizer 会产生信号 SIGABRT

    当我在 Xcode 版本 11 3 11C29 中创建一个新的单视图应用程序并运行时 一切正常 当我打开线程清理时 并尝试运行同一个应用程序 我明白了Thread 1 signal SIGABRT 这是回溯 lldb bt thread 1
  • WatchOS 2(测试版 5):watchAppInstalled 返回 false

    Watch App已安装在手表上 我可以在手表上点击并运行它 但是watchAppInstalled方法返回 false 另外 我只能使用 Xcode 7 安装 Watch 应用程序 如果我尝试通过打开开关使用 Watch iOS 应用程序
  • 当我在文本框中输入一些文本时,OnKey 事件被调度两次。如何预防?

    在我的调试过程中 我发现发生了一件奇怪的事情 我有一个EditText我将当前活动定义为OnKeyListener在用户键入时执行验证 Code txtPhoneNumber setOnEditorActionListener this t