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 方法不适用于自定义视图 的相关文章

随机推荐

  • 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 该类适用于主菜单中的任何对象 按钮 徽标等 我为他们创建了一个特殊的类 因为我在菜单