【问题标题】:Set onClick in xml for custom view in android in't work on some version在 xml 中为 android 中的自定义视图设置 onClick 在某些版本上不起作用
【发布时间】:2017-06-23 07:11:45
【问题描述】:

我创建自定义视图并在一些 xml 活动中使用它,然后设置android:onClick="buttonOnClick"。我将buttonOnClick 定义为public 并将其写入其活动并设置tools:context
Activity.java

 public void buttonOnClick(View view) {
        validate(view);
    }

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    ...
    tools:context="com.test.myapp.Activity">

   <com.test.myapp.GifImageViewComp
      ....
    android:onClick="buttonOnClick"  />

它在Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP 上工作,但在其他操作系统版本中,自定义视图 xml onclick 属性尝试从视图类而不是活动中查找处理程序。

我不想在每个视图上使用 onClick 或 setOnClickListener 的实现,我想在活动布局中使用 onClick

【问题讨论】:

  • 改为在类中使用 onClickListener,并使用您的 customView 的 id,调用 onClick()
  • 你设置了android:clickable="true" ??? .对于良好的做法使用 onClickListener
  • 是的,设置android:clickable="true"
  • @MohammadJavad 仅供参考,android:onClick 在片段中不起作用
  • @IntelliJAmiya,我不使用 Fragment ,但它在 android 5 或更高版本中工作

标签: java android android-layout android-view android-custom-view


【解决方案1】:

只是不清楚 xml 中的按钮与 Activity 中对点击事件做出反应的方法,除非您 明确地看到它在您的 Java 文件中定义。使用 android:onClick 方法你甚至可以忘记你的布局中有一个按钮或 这是处理其 onClick 事件的方法。

Source

您应该使用 OnClickListener 而不是 android:onClick

当视图被调用时回调的接口定义 点击。

此方法获取对 Listener 的引用并注册一个回调,以便在单击 View 时调用。

仅供参考

确保在 XML 中设置 android:clickable="true" 。你应该指定这个属性

<com.test.myapp.GifImageViewComp
    android:clickable="true"
    android:onClick="buttonOnClick"  />

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多