Android onClick 方法不适用于自定义视图

2024-01-04

我已经开始开发一个应用程序。我昨天构建了菜单,但 onClick 方法不起作用! 我创建了一个扩展 View 的类,并将其称为 MainMenuObject - 该类适用于主菜单中的任何对象(按钮、徽标等)。我为他们创建了一个特殊的类,因为我在菜单启动时制作动画。在构建了 MainMenuObject 类之后,我构建了另一个类 (OpeningTimesView),该类扩展了 View,并且其中包含主菜单的所有按钮,并将用作主活动的布局。

一切都很好,动画进行得非常好,我想在按钮上放置侦听器,因此我向 OpeningTimesView 类添加了 onClickListener 的实现,并重写了 onClick 方法。然后我使用 setOnClickListener(this) 和 setClickable(true) 将侦听器添加到按钮,但它不起作用!我已经尝试了一切!请帮我弄清楚我做错了什么。我已经向 onClick 方法添加了一个 toast,该方法不依赖于任何“if”,但它两者都不会显示。

(顺便说一句,有什么方法可以将屏幕宽度和高度定义为所有类都可以访问的变量?它不能是静态的,因为您从显示对象中获取高度和宽度,但必须有另一种方法)

这是代码:

public class OpeningTimesView extends View implements OnClickListener{
    private MainMenuObjectView searchButton;
    private MainMenuObjectView supportButton;
    private MainMenuObjectView aboutButton;
    private int screenWidth;
    private int screenHeight;
    public OpeningTimesView(Context context, Display dis) {
        super(context);

        this.screenWidth = dis.getWidth();
        this.screenHeight = dis.getHeight();

        searchButton = new MainMenuObjectView(context, 200, MovingMode.RIGHT, R.drawable.search, dis);
        supportButton = new MainMenuObjectView(context, 400, MovingMode.LEFT, R.drawable.support, dis);
        aboutButton = new MainMenuObjectView(context, 600, MovingMode.RIGHT, R.drawable.about, dis);

        searchButton.setClickable(true);
        supportButton.setClickable(true);
        aboutButton.setClickable(true);

        searchButton.setOnClickListener(this);
        supportButton.setOnClickListener(this);
        aboutButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View view){
        Toast.makeText(getContext(), "Search button pressed", Toast.LENGTH_SHORT).show();
        if(view == searchButton){
            Toast.makeText(getContext(), "Search button pressed", Toast.LENGTH_SHORT).show();
        }
        else if(view == supportButton){
            Toast.makeText(getContext(), "Support button pressed", Toast.LENGTH_SHORT).show();
        }
        else Toast.makeText(getContext(), "About button pressed", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onDraw(Canvas canvas)
    {
        // Drawing the buttons
        this.searchButton.onDraw(canvas);
        this.aboutButton.onDraw(canvas);
        this.supportButton.onDraw(canvas);
    }

预先感谢,埃拉德!


我刚刚遇到了同样的问题 - 我创建了一个自定义视图,当我通过调用在活动中为其注册一个新的监听器时v.setOnClickListener(new OnClickListener() {...});听众只是没有被叫到。

在我的自定义视图中,我还覆盖了public boolean onTouchEvent(MotionEvent event) {...}方法。问题是我没有调用View类的方法 -super.onTouchEvent(event)。这解决了问题。因此,如果您想知道为什么您的侦听器没有被调用,您可能忘记调用超类的onTouchEvent method

这是一个简单的例子:

private static class CustomView extends View implements View.OnClickListener {
    public CustomView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);   // this super call is important !!!
        // YOUR LOGIC HERE
        return true;
    }

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

Android onClick 方法不适用于自定义视图 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • Twitter 登录说明

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

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • 从 Android 代码设置的 SECRET_CODE

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

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • 从 React Native Js 代码调用 Android Native UI 组件方法

    我创建了一个 CustomView SignatureView java 它扩展了 LinearLayout 以捕获 Android Native 中的签名 并创建了SignatureCapturePackage java和Signatur
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • 如何在 Viewpager 中禁用预加载下一页? [复制]

    这个问题在这里已经有答案了 如何在 Viewpager 中禁用页面预加载 I tried viewPager setOffscreenPageLimit 0 但它不起作用 用这个viewPager setOffscreenPageLimit
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它

随机推荐

  • Android 支持 SNMP 吗?

    我想知道Android 2 1 是否支持SNMP 如果不可用 是否可以为Android移植snmp源 请指点一下 如果可用 我如何测试它在我的设备中是否存在 欢迎大家指点 Thanks Sen SNMP4J 2 x可以直接在Android上
  • 如何在 Hive 中编写子查询并使用“In”子句

    如何在 Hive 中使用 In 子句 我想在 Hive 中写这样的东西 从 y 中选择 x 其中 y z 按 x 顺序 从 y 中选择不同的 z 但我没有找到任何方法可以做到这一点 我在 Hive 0 7 中尝试了 In 子句 它抛出错误
  • Mongoid `group()` 条件

    我想为 Mongoid 中的分组提供一个条件 但是如何为条件哈希中的属性发送多个值 这就是我想做的 PageViews collection group cond page id 4e6912618083ab383e000010 4e691
  • 使用 C++ 尾随返回类型时 auto 的含义是什么?

    而不是平常 void foo void cout lt lt Meaning of life lt lt 42 lt lt endl C 11允许是一种替代方案 使用尾随返回 auto bar void gt void cout lt lt
  • 构建将工作表导出为 PDF 的链接

    我一直在尝试将特定工作表导出为 PDF 以用于邮寄目的 并发现我需要它们采用特定格式 我到处寻找要使用的代码 最终发现了这个 https issuetracker google com issues 36761058 comment24 h
  • 水平缩放和垂直缩放是什么意思? [复制]

    这个问题在这里已经有答案了 在数据库位于第四层的三层架构中 什么是scaling horizontally and scaling vertically mean 简单来说 横向扩展就是添加更多服务器 纵向增加服务器的资源 您可以找到更多信
  • Terraformer 合并多个 tfstate 文件

    我正在使用 terraformer 导入 不是 terraform 检查这个 https github com GoogleCloudPlatform terraformer https github com GoogleCloudPlat
  • 无法在c#中启动资源管理器进程,只能启动窗口文件资源管理器

    我想启动资源管理器进程 使用任务栏等 但是当我启动它 在代码中 时 我只打开文件资源管理器的窗口 而不是其余的 但如果我在任务管理器中执行 explorer exe 它就会起作用 就在我在 Windows 7 64 位机器上执行此操作时 在
  • 从S3读取文件到kafka主题

    我遇到的情况是 所有事件数据都存储在 s3 存储桶中 我需要将其从 S3 获取到 ec2 上的 Kafka 主题 我正在使用 CamelAWSS3Connector 但面临连接器无法工作的问题 以下是我面临的错误 2023 01 06 10
  • 在 MVC Action 中启动和忘记异步任务

    我有一个标准的非异步操作 例如 HttpPost public JsonResult StartGeneratePdf int id PdfGenerator Current GenerateAsync id return Json nul
  • xsl-fo fop 0.94 使用 keep-together 和 wrap-option="wrap"

    在 xsl fo fop 0 94 中 将 keep together 与 wrap option wrap 一起使用会忽略换行选项吗 有没有办法让它们都工作
  • 使用 mongoose 在 mongoDB 集合中保留单个文档[重复]

    这个问题在这里已经有答案了 我创建了一个集合 但其中应该保留一个文档 如何确保 mongoose 模式中有单个文档 您可以创建 上限 集合 在其中可以设置可以存储在其中的文档限制 但是 它不会阻止添加另一个文档 不确定 如果您需要该功能 如
  • Rails 中有没有任何方法可以将分钟作为整数转换为天、月等

    我有一个以分钟为单位的值列表 我想轻松地将其转换为最接近的匹配项 如下所示 10 gt 10 minutes 1440 gt 1 day 86400 gt 2 months 525600 gt 1 year Rails 有没有简单的方法可以
  • pyodbc- SQL Server 连接失败

    我一直在尝试连接到 Microsoft SQL Server 我已设置 ODBC 连接并且测试成功 我没有使用 Windows 身份验证连接到 SQL Server 但它不断收到此错误 无法与 Windows 身份验证一起使用 Interf
  • 如果列中的相邻单元格具有相同的值,则突出显示单元格

    我想 遍历 Excel 列 如果前面或后面的单元格具有相同的值 则用颜色标记它 例如 Column A 1 lt highlight 1 lt highlight 1 lt highlight 2 1 3 lt highlight 3 lt
  • 找不到openCV头文件

    最近在学习openCV 我按照 openCV 网站上的教程进行操作 http docs opencv org doc tutorials core how to scan images how to scan images html how
  • 给定数字 p ,在数组中找到两个元素,其乘积 = P

    我正在寻找以下解决方案 Given a array and a number P find two numbers in array whose product equals P 寻找比 O n 2 更好的解决方案 我可以使用额外的空间或其
  • R 中按两列分组和级别并集

    我陷入了一个看似微不足道的问题 但我现在无法弄清楚 我什至不知道如何正确地表述它 如果您有任何建议 欢迎您 我有一个 data frame 我想根据两列对其进行分组 索引 问题是 我想要分组的行在这些列中不共享相同的值 相反 某些行在一列中
  • 如何从外部网站获取值,而该值是由该网站中的 javascript 设置的

    我曾经使用 JQuery 加载外部网站内容 html json 我还获得了一个代理 PHP 页面 可以与一些具有严格来源政策的网站一起使用 我的问题是针对某些网站 在他们的 HTML 源代码中 span 0 00 span 在 Chrome
  • Android onClick 方法不适用于自定义视图

    我已经开始开发一个应用程序 我昨天构建了菜单 但 onClick 方法不起作用 我创建了一个扩展 View 的类 并将其称为 MainMenuObject 该类适用于主菜单中的任何对象 按钮 徽标等 我为他们创建了一个特殊的类 因为我在菜单