Android onFocusChange 被多次触发

2024-04-16

我正在使用列表适配器(扩展 SimpleCursorAdapter)来填充一些数据。

我在bindView 中调用View.SetOnFocusChangeListener,其中我将侦听器附加到所需的EditText。问题是该事件被触发 4 次,最终 EditText 失去焦点,直到我再次单击该事件被触发 3 次并且 EditText 保留焦点。

我认为它应该只被调用一次。 OnTouch 事件是否对此负责?

这是我的代码:

@Override
public void bindView(View view, Context context, Cursor cursor) {       
    view.setId(cursor.getPosition());//Setting the row id to the corresponding cursor row id for easier data manipulation
    super.bindView(view, context, cursor);
    EditText etItemQuantity = (EditText)view.findViewById(R.id.etItemQuantity);
    if(!isNumeric(etItemQuantity.getText().toString())) {
        etItemQuantity.setFocusable(false);
        etItemQuantity.setFocusableInTouchMode(false);
        etItemQuantity.setClickable(false);
    } else {
        etItemQuantity.setFocusable(true);
        etItemQuantity.setFocusableInTouchMode(true);
        etItemQuantity.setClickable(true);
        etItemQuantity.setOnFocusChangeListener(ofcl);
        etItemQuantity.setOnEditorActionListener(oeal);
    }

}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View view = inflater.inflate(layout, null);
    return view;
}

View.OnFocusChangeListener ofcl = new View.OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!(v instanceof EditText)) {                     
            return;
        }
        EditText tableEt = (EditText)v;

        if(hasFocus) {
            tableEt.setTag(tableEt.getText().toString());
            tableEt.setText("");
        } else {
            if(tableEt.getText().toString().equals("")) {           
                tableEt.setText(tableEt.getTag().toString());
                tableEt.setTag(null);
            }
        }


    }
};

就我而言,我有onFocusChange在 API 24 中触发了两次。

editText.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
    // ... hasFocus
}

container.setOnTouchListener { v, _ ->
    editText.clearFocus()
    hideKeyboard(editText)
    v.performClick()
    return@setOnTouchListener false
}

我想将焦点从EditText当用户点击外部区域时EditText。但在 API 24 中editText.clearFocus() fired onFocusChange两次。为了在 API 24 和 API 30 中设置类似的行为,我添加了these https://stackoverflow.com/a/63229539/2914140线路到XML https://stackoverflow.com/questions/2150656/how-to-set-focus-on-a-view-when-a-layout-is-created-and-displayed:

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/container"
    ....
    android:focusableInTouchMode="true"
    android:focusable="true">

    <EditText ... />

您可以更改代码而不是 XML,但在 API 30 中可能会出现新问题:

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

Android onFocusChange 被多次触发 的相关文章

  • WifiConfiguration 在 Lollipop 中启用网络

    我正在研究 Wifi 项目 有一个模块可以让用户以编程方式加入 wifi 在 kitkat 及以下版本中它可以成功工作 但在 Lollipop 中它不起作用 这是代码 WifiManager wifiManager WifiManager
  • 启动画面反应本机后出现白屏

    编辑 似乎是因为 MainActivity 加载太重而生成白屏 我设法首先使用本机启动屏幕来解决 然后在本机被杀死后立即基于下一个插件的 js 实现 我做了一些修改完美匹配两个启动画面https github com crazycodebo
  • 当应用程序停止使用 Sencha Touch 2.2 和 Phonegap 时,LocalStorage 存储不会保留在 Android 手机上

    这在我的浏览器中工作正常 但是当我在手机上安装该应用程序并使用它时 它看起来很好 直到我强制它停止并重新打开该应用程序 然后我的所有记录都消失了 我正在使用 2 2 和 Phonegap 任何帮助将非常感激 这是我的商店 Ext defin
  • 如何以编程方式从 mipmap 文件夹加载图像? [复制]

    这个问题在这里已经有答案了 如何从 加载图像mipmap以编程方式保存文件夹 与可绘制对象一样 img setImageResource imageId 我使用的是Android Studio 1 2 1 In 安卓工作室我们有mipmap
  • 如何在发布版本中使用 Zebra EMDK?

    所以我有一台 Zebra MC330M 设备 我之前创建了一个应用程序 我想使用 PDA 内置的条形码扫描仪 如果在调试模式下运行我的应用程序 一切正常 我可以读取条形码 但是如果我创建暂存或释放版本 apk 则条形码读取器不活动 因此如果
  • 使用 ArrayAdapter 的 ListView 中的按钮

    我有一个使用 POJO 类填充的 ArrayAdapter 列表视图由 2 个布局组成 1 代表菜单项 1 代表类别 带分隔符的列表视图很好 后来我尝试在每个菜单项行中添加一个按钮来编辑其中的详细信息 当我尝试获取单击按钮的行的位置时 我遇
  • Android Material主题alpha颜色问题

    我已经创建了一个构建版本为 5 0 的应用程序 我在下面编写了主题
  • Droid 3 上的列表视图背景为灰色

    我有一个带有自定义背景的列表框 它在黑色背景的两侧显示一条细白线 在我所有的测试手机 Galaxy Captivate Vibrant Nexus 1 G Tablet Archos 32 Droid 上运行良好 我刚买了一台 Droid
  • Android:每秒更新蓝牙 RSSI

    我试图每秒显示蓝牙信号强度 RSSI Timer 来自检测到的设备 但我无法调用onRecive 多次因为接收器生命周期 http developer android com reference android content Broadc
  • 创建用于 Android 库分发的 JAR

    我正在开发一个 android 库 并希望导出一个 JAR 文件 我可以分发该文件供其他人在他们的应用程序中使用 我不想分发源代码 因为它包含有关发布到我的网络服务器的详细信息 我尝试使用在 bin 目录中创建的 JAR 文件并将该 jar
  • 在InputMethodService 外部调用InputMethodManager.setInputMethod(IBinder token, String id)。哪里可以找到代币?

    我想通过单击按钮在我的 EditText 上显示 Google 语音输入 IME 所以 根据this http android developers blogspot ru 2011 12 add voice typing to your
  • 上次更新arm64-v8a后,模拟器在M1 Mac上显示离线

    昨天模拟器运行得很好 系统镜像为arm64 v8a 我不太记得工作系统映像的版本名称 但是昨天我接受了 ARM 64 系统映像的更新 版本名称是 S 我可以从 AVD 管理器启动模拟器 当我按 运行应用程序 按钮时模拟器也会启动 但是 该应
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • Android EditText 不起作用,android:imeOptions="actionNext" android:inputType="phone"

    我已经尝试过了 只有删除android inputType phone 键盘回车可以跳转到下一个EditText 不知道大家之间是否有过一些冲突android imeOptions actionNext and android inputT
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 从 Activity 调用选项卡式片段方法

    我有一项活动由三个片段组成 这些片段使用使用 PagerAdapter 的操作栏选项卡 我想要做的是从主活动访问活动选项卡式片段中的方法 我已经尝试了下面的代码 但这只是将片段返回为空 所以我猜它无法在选项卡中找到它 NPListFragm
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • RecyclerView 适配器的 Kotlin 泛型

    我正在尝试编写一个通用的 recyclerview 适配器 我找到了几个例子 然而 仍然无法弄清楚如何实现通用适配器 我写的代码是 open abstract class BaseAdapter
  • 更改 Android 中突出显示文本的颜色

    我不确定这是否可能 也许有人可以纠正我 我在 Android 应用程序中有一个 EditText 视图 该视图在蓝色背景上有白色文本 当选择文本时 通过长按和编辑对话框 我希望突出显示为白色并将文本颜色更改为黑色 令人烦恼的是 似乎没有办法
  • Android VideoView 中纵向视频方向错误

    我在 Android 设备上以肖像方向拍摄新视频 如下所示 Intent intent new Intent android provider MediaStore ACTION VIDEO CAPTURE startActivityFor

随机推荐

  • 如何使用c++在运行时动态注册工厂类中的类

    现在 我实现了一个工厂类来动态创建带有标识字符串的类 请参见以下代码 void IOFactory registerIO Register NDAM9020 gt IOBase return new NDAM9020 Register BK
  • 如何更改 tkinter 树视图中选定单元格的前景色或背景色?

    我想更改 tkinter treeview 中选定单元格的前景色或背景色 我怎样才能做到这一点 This link https stackoverflow com a 18057449 5722359显示了更改树视图中所有单元格颜色的命令
  • 构建一个完整的在线支付网关,如 Paypal [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以这个问题不是关于将现有的支付网关集成到我的网站中 这更多的是一个架构问题 我想建立一个类似于Paypal 的系统 现在我知道 Pa
  • 如何使用 Firebase 函数向用户发送 FCM?

    Firebase 目前已推出Firebase 功能添加服务器端代码 Firebase 功能 https firebase google com docs functions 我想知道当数据库发生某些变化时是否可以通过这些函数调用 FCM 通
  • DB2 将 ISO 8601 时间戳字符串转换为 DB2 时间戳

    我有一个要求 我需要获取两个 ISO 8601 时间戳格式的字符串 并且必须比较它们并获取它们的最大时间戳 字符串采用以下格式 2014 06 11T16 45 45Z 为了进行比较 我需要将它们转换为 DB2 时间戳 然后进行比较 问题出
  • 获取 Roslyn 中类之间的依赖关系

    我使用 Roslyn 成功获取了项目之间的依赖关系 现在我想获取类之间的依赖关系 类似于 Visual Studio Enterprise 中的代码映射功能 这是我的代码 部分是我想象我能得到一些东西的地方 不过 我对 Roslyn API
  • VBA用于在文本溢出时缩小PowerPoint中的字体

    我正在尝试为 PowerPoint 文件找到一个宏 该文件是通过 CAT 工具进行语言转换后导出的 在某些语言对中 由于语言长度的差异 翻译的内容将无法放入源文件文本框中 因此 翻译和导出的 PowerPoint 文件包含多个形状 文本框
  • 检测是否安装了 SQL Server Compact Edition 3.5 SP2 x64?

    我正在构建一个安装程序 并且想要引导 SQL Server Compact Edition 3 5 SP2 问题是我正在寻找注册表项HKLM SOFTWARE Microsoft Microsoft SQL Server Compact E
  • 如何向文本框添加按钮?

    我正在尝试制作一个右侧带有按钮的文本框 我的代码 public partial class TextBoxButton TextBox Category Button Description Button in textbox public
  • SQL Server 中的 DECODE() 函数

    SELECT PC COMP CODE R PC RESUB REF DECODE PC SL LDGR CODE 02 DR CR PC DEPT NO DEPT PC DEPT NO PC SL LDGR CODE PC SL ACNO
  • Jquery mobile 中的选择选项出现问题

    我有一个表格 其中包含输入文本以及选择选项和按钮 单击按钮时将克隆表格行 除了选择选项之外 一切都工作正常 克隆表行后 选择选项不会显示我选择的内容 这是 JsFiddlehttp jsfiddle net aravinth Ad22d h
  • Android 中相机捕获图像的图像叠加

    我需要用相机拍照 同时在相机视图顶部显示叠加图像 拍照后 我需要保存用户在拍照时看到的内容 有人可以建议我吗 请 public void onPictureTaken byte data Camera camera Bitmap camer
  • 检查orientdb中是否存在类

    如何检查东方数据库中是否存在类 如果它不存在于数据库中 我需要创建它并插入一条记录 如果存在 我需要插入该记录 我需要使用 JAVA 做同样的事情 您可以使用以下语句通过 SQL 检索架构信息 select expand classes f
  • 如何读取 Windows 特定扩展名

    在 OpenGL superible 中 示例说我可以通过以下方式读取 Windows 特定扩展 Type defined in the book as char but that is not what glGetString retur
  • C# 在发布模式下运行时,调试语句会被编译出来吗?

    使用说似乎是理想的 就可读性而言 Debug WriteLine写入输出而不是大量 if DEBUG声明 当程序在发布模式下编译时 所有开销都用Debug WriteLine消失就好像它不存在一样 或者该函数仍然被调用 但内部没有执行任何操
  • 使用“xts”包中的“to.weekly”函数导致错误的周末结束日期

    我有一个非常奇怪的问题 我正在使用to weekly and to period函数来转换每日xts反对每周数据 在大多数情况下 我将周末结束日期设为星期五 day of week函数将返回 5 例如 2010 01 08 2011 02
  • 如何从网络共享调试 Visual Studio 2010 中的解决方案?

    我最近购买了一台新的 Mac 笔记本电脑 并在 Parallels 虚拟机中运行 VS2010 它对我来说基本上运行良好 但我在调试特定项目类型时遇到了一些问题 这与项目是通过网络共享访问的事实有关 测试项目无法运行 因为测试运行程序无法加
  • 使用 Access 2007 中窗体上的按钮打开外部文件

    我正在为我的部队创建一个数据库 我在陆军 我需要一个按钮 单击该按钮即可启动文件 该文件是一个 xfdl 文件 用于 PureEdge 程序中的军事表格 这是否可能以及我将如何去做 我已经尽我所能地搜索了它 但似乎我的 Google Fu
  • 在Linux下,C++源代码如何成为可执行文件或静态/动态库。以及程序运行时如何加载到内存中

    我知道源代码可以编译并链接到共享 静态库或 ELF 可执行文件 当程序运行时 它会加载到内存中并根据ELF格式创建一个进程映像 但我不确定程序如何加载共享库 链接器如何在外部库中查找符号以及 a 存档如何工作 如果程序在 64 位操作系统上
  • Android onFocusChange 被多次触发

    我正在使用列表适配器 扩展 SimpleCursorAdapter 来填充一些数据 我在bindView 中调用View SetOnFocusChangeListener 其中我将侦听器附加到所需的EditText 问题是该事件被触发 4