onClick 事件未触发 |安卓

2023-11-27

我制作了一个非常简单的测试应用程序,其中包含一项活动和一种布局。这onClick第一次按下时不会触发,正如它应该的那样。

活动:

package com.example.mytest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText ed1 = (EditText) findViewById(R.id.editText1);

        ed1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_LONG)
                        .show();

            }

        });
    }

}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:ems="10" />

</RelativeLayout>

如果您运行此应用程序,然后单击第二个editText然后回到第一个,它不会触发onClick。可以一直来回选择,不会触发onClick根本不。我需要这个基本功能,但一直无法想出一种方法让它发挥作用。有想法吗?

Notice

我已尝试了在 API 级别 16 物理设备和 API 级别 8 模拟器上推荐的所有方法,但遇到了同样的问题。

澄清

When editText1获得焦点并被单击,然后onClick方法触发。如果editText2已聚焦,然后editText1被点击,它doesn't火。大问题。


概述,当用户与任何 UI 组件交互时,会按自上而下的顺序调用各种侦听器。如果较高优先级侦听器之一“消耗事件”,则较低优先级侦听器不会被称为.

在您的情况下,这三个侦听器按顺序调用:

  1. 触摸监听器
  2. OnFocusChangeListener
  3. 单击监听器

用户第一次触摸 EditText 时,它会获得焦点,以便用户可以键入。动作消耗在这里。因此优先级较低的 OnClickListener 不会被调用。每次连续的触摸都不会改变焦点,因此这些事件会向下传递到 OnClickListener。

按钮(和其他此类组件)不会从触摸事件接收焦点,这就是每次调用 OnClickListener 的原因。

基本上,你有三个选择:

  1. 自己实现一个OnTouchListener:

     ed1.setOnTouchListener(new OnTouchListener() {
         @Override
         public boolean onTouch(View v, MotionEvent event) {
             if(MotionEvent.ACTION_UP == event.getAction())
                 editTextClicked(); // Instead of your Toast
             return false;
         }
     });
    

    每次触摸 EditText 时都会执行此操作。请注意,侦听器返回false,这允许事件向下传递到内置的 OnFocusChangeListener,该监听器会更改焦点,以便用户可以在 EditText 中键入内容。

  2. 与 OnClickListener 一起实现 OnFocusChangeListener:

     ed1.setOnFocusChangeListener(new OnFocusChangeListener() {
         @Override
         public void onFocusChange(View v, boolean hasFocus) {
             if(hasFocus)
                 editTextClicked(); // Instead of your Toast
         }
     });
    

    当焦点更改时,此侦听器捕获第一个触摸事件,而您的 OnClickListener 捕获所有其他事件。

  3. (这不是一个有效的答案,但这是一个值得了解的好技巧。)将 focusable 属性设置为false在您的 XML 中:

     android:focusable="false"
    

    现在 OnClickListener 将触发every单击它的时间。但这使得 EditText 无用,因为用户无法再输入任何文本......

Note:

getApplicationContext()可能会造成内存泄漏。一个好习惯是除非绝对必要,否则避免使用它。您可以放心使用v.getContext()反而。

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

onClick 事件未触发 |安卓 的相关文章

  • invalidateOptionsMenu 在片段中不起作用

    显示或隐藏项目ActionBar根据文本中是否有文本EditText or not 所以 我做了以下事情 public class NounSearch extends android app Fragment EditText seach
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • Facebook LoginActivity 未正确显示

    我有一个使用 Facebook 登录的应用程序 我有 FacebookSDK 并且使用 com facebook LoginActivity 问题是 在 10 英寸平板电脑上 当显示软键盘时 活动无法正确显示 我使用的是 Samsung G
  • 版本 5 上带有 getBackground().setAlpha 的按钮 - 棒棒糖无法正常工作

    我有这段代码 适用于自 API 14 以来的每个版本 但在 Android 5 0 Lollipop 上无法正常工作 以下是我希望按钮出现的方式 单击按钮1 buttonArrivals getBackground setAlpha 180
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • javascript onclick 进入新窗口

    这是我的代码
  • 当应用程序未运行时如何堆叠 Firebase Cloud Messaging 通知?

    我在用Firebase Cloud Messaging将推送通知从我的服务器发送到我的 Android 应用程序 当应用程序运行时 通知是stacked因为我将它们设置为我的一个组FirebaseMessagingService 这很好 但
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • 按名称查找视图

    是否可以通过名称而不是 id 来查找视图 findViewById R id someView 但我想做这样的事情 findViewByName someView 在处理 xml 时 您必须通过标识符查找视图 但是您可以使用以下方式查找标识
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • WebView 在某些设备上如果不长按则不会滚动

    我有一个 WebView 设置如下 the web view mWebView WebView findViewById R id webView push the url on to the web view mWebView loadU
  • Amazon IAP 不会调用 onPurchaseResponse

    我有一个 Android 应用程序 它使用 IAP 我正在发送PurchasingManager initiateGetUserIdRequest 并得到用户识别成功 in onGetUserIdResponse 得到回复后Purchasi
  • Android:获取最新意图

    如何获取发送到活动的最后一个意图 的文档onNewIntent 建议我需要做这样的事情 class MyActivity public void onNewIntent Intent intent setIntent intent reac
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p

随机推荐

  • 我想将子数组添加到 php 中的一个数组中[重复]

    这个问题在这里已经有答案了 我有这样的数组 Array 0 gt Array 0 gt rose 1 gt monkey 2 gt donkey 1 gt Array 0 gt daisy 1 gt monkey 2 gt donkey 2
  • 如果用户没有安装 .NET,如何部署 C# 应用程序?

    我有一个 C 程序 我想将其提供给我的用户 但问题是它需要 NET Framework 版本 4 0 这是一个问题 因为它是最近发布的 2010 年 4 月 很多人可能还没有它 更糟糕的是 下载和安装框架需要一段时间 约 10 分钟 有什么
  • 在android中上传进度条?

    我使用下面的代码将视频上传到 php 服务器 它工作正常 但是我需要在上传文件时显示进度条 我需要在文件上传和进度条增量之间进行同步 有人提出一些想法吗 HttpURLConnection conn null DataOutputStrea
  • 删除某个类型的所有指针的标准 c++11 方法

    有没有办法用一些 c 11 或最多一个 boost 库来做到这一点 include
  • 如何检查使用了哪个segue

    我有两个 segue 导致相同的结果viewController 有 2 个按钮连接到同一个viewController使用2个segue 在那里面viewController我需要检查点击了哪个按钮 所以实际上我需要检查使用 执行了哪个s
  • 谷歌文档脚本中的“有必要分离元素”错误

    当我尝试将段落从一个文档复制到另一个文档时 出现意外错误 需要分离元件 这是什么意思 我究竟做错了什么 function test copy paragrahps var final final var doc1 get doc final
  • 使用 Google OpenID 进行 Android 身份验证。接下来是什么?

    我不是程序员 但我需要自己做这件事 我需要一些帮助 我这两天一直在寻找解决方案 但没有找到 好的 我正在编写 Android 本机应用程序 我的第一个目标是实现通过Google帐户 已在手机上设置 登录的可能性 所以我使用 AccountM
  • 计算数组中的反转次数

    我正在设计一种算法来执行以下操作 给定数组A 1 n 对于每一个i lt j 找到所有反演对 使得A i gt A j 我正在使用合并排序并将数组 A 复制到数组 B 然后比较这两个数组 但我很难了解如何使用它来查找反转数 任何提示或帮助将
  • 在 pyqt 小部件中实现 pyqtgraph 多处理

    我正在尝试在我用 Python 设计的 GUI 上绘制图像 完整的程序将从相机收集图像数据 然后在 GUI 上显示图像 我已经探索过使用 matplotlib 但它对于我的应用程序来说太慢了 我需要绘图相当快地更新 最好是与我从相机获取的速
  • 如何禁用 Ruby on Rails 应用程序中的所有 form_for 输入字段?

    我正在尝试让我的 Rails 应用程序变得干燥一些 所以我想在我的应用程序中渲染一个表单show查看但是disable所有输入字段 show html erb 最好的方法是什么 谢谢你的帮助 JavaScript 一种方法是使用 JS 来完
  • 有没有办法在多个特征上实现一个特征?

    为什么这不起作用 trait Update fn update mut self trait A trait B impl
  • 如何使用 Google Maps ios SDK 跟踪用户位置并显示行进路径

    我目前正在构建一个ios应用程序 我希望实现一个功能 其中用户的位置显示在Google地图视图上 并且当他们移动折线时显示用户迄今为止走过的路径 这显然需要实时发生 到目前为止 我已经初始化了 Google 地图视图 并且可以使用观察Key
  • URL 不带 .aspx 扩展名

    我注意到很多 ASP Net 站点没有以 aspx 结尾的 URL 一个例子是 https stackoverflow com questions 他们是否创建了一个 Questions 文件夹并将 Default aspx 放入其中 在这
  • 设置 Spring JPA 项目以在 MVC 项目中使用 - 创建 bean 时出错

    我在 eclipse 中开发了一个 Spring JPA 项目 它可以访问存储在 mysql 服务器中的数据 现在我需要将这个项目导入到 Spring MVC 项目中 所以 我在JPA项目的构建路径中配置导出maven依赖项 我将项目添加到
  • 将值从 HTML 传递到 SCSS

    我是 SCSS 的新手 不太确定如何使用它 我已经在 SO 和其他地方寻找解决方案 但找不到 我正在开发一个显示手机列表的应用程序 我通过调用 REST API 获取此列表 以 JSON 形式 所有手机都显示相同类型的信息 例如名称 型号
  • 如何使TabPages可拖动?

    我想让用户通过拖放来重新排列 TabPages 顺序 此外 如果用户能够将 TabPages 从一个 TabControl 拖动到另一个 TabControl 那就太酷了 两种方式都与 Firefox 和 Total Commander 类
  • 将 List[Either[A, B]] 转换为 Either[List[A], List[B]]

    如何转换List Either String Int to Either List String List Int 使用类似于猫的方法sequence 例如 xs sequence在下面的代码中 import cats implicits
  • 对月份(带字符串)排序算法

    我有这个月的数组 January March December October 我想把它排序如下 January March October December 我目前正在思考 如果 否则 可怕的级联 但我想知道是否还有其他方法可以做到这一点
  • 将 strsplit 应用于 data.frame 中的特定列

    我有一个包含分类信息的大型数据框 这是一个例子 gt d lt data frame x c 1 2 3 4 classification c cl1 scl1 cl2 cl3 bla cl4 subclass2 gt d x classi
  • onClick 事件未触发 |安卓

    我制作了一个非常简单的测试应用程序 其中包含一项活动和一种布局 这onClick第一次按下时不会触发 正如它应该的那样 活动 package com example mytest import android os Bundle impor