《Android全埋点解决方案》 —1.2 View 绑定listener 方式

举报
华章计算机 发表于 2019/12/19 11:40:30 2019/12/19
【摘要】 本节书摘来自华章计算机《Android全埋点解决方案》 一书中第1章,第1.2节,作者是王灼洲 。

1.2 View 绑定listener 方式

随着Android 相关技术的不断更新迭代,给View 绑定listener 的方式也是多种多样的。下面以Button 为例来介绍日常开发中比较常见的几种绑定listener 的方式。

通过代码来设置listener

Button button = findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

        //do something

    }

});

这种方式是目前开发中最常用的方式,也是我们全埋点方案需要重点解决和重点支持的方式。

通过android:onClick属性绑定listener

先在布局文件中声明Button 的android:onClick属性,如:

<android.support.v7.widget.AppCompatButton

    android:id="@+id/xmlOnClick"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:onClick="xmlOnClick"

    android:text="android:onClick 绑定OnClickListener"/>

我们设置android:onClick的属性值为“xmlOnClick”,此时的“xmlOnClick”代表点击处理逻辑对应的方法名。然后在对应的Activity文件中声明android:onClick属性指定的方法xmlOnClick:

public void xmlOnClick(View view) {

    //do something

}

注意:该方法必须有且仅有一个View类型的参数。

这种方式在一些新的项目中不是很常见,在一些比较老的Android 项目中可能会有这样大量的使用方式。

通过注解绑定listener

目前有很多第三方的库都提供了类似的功能,下面以ButterKnife 为例:

@OnClick({R2.id.butterknife})

public void butterKnifeButtonOnClick(View view) {

    //do something

}

首先定义一个方法,并且该方法有且仅有一个View 类型的参数,然后在该方法上使用ButterKnife的@OnClick注解声明,其中的参数代表控件的android:id。

这种方式,也是目前比较流行的其中一种使用方式。

关于ButterKnife 更详细用法可以参考其官网:https://github.com/JakeWharton/butterknife。

listener含有Lambda语法

Lambda 是 Java8 开始支持的,如:

AppCompatButton button = findViewById(R.id.lamdbaButton);

button.setOnClickListener(view ->Log.i("MainActivity", "Lambda OnClick"));

这种方式,也是目前比较流行的一种使用方式。

事实上,这根本就不算一种绑定 listener 的方式,只是绑定的 listener 中含有Lambda 语法而已。之所以在这里要提到它,是因为这种方式会对我们选择全埋点方案时产生一定的影响,比如后面将要介绍的 AspectJ 全埋点方案目前就无法支持这种带有 Lambda 语法的点击事件。

关于 Lambda 的详细信息可以参考:https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html。

通过 DataBinding绑定listener

先在布局文件中声明 android:onClick属性:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>

    <variable

        name="handlers"

        type="cn.sensorsdata.autotrack.android.app.MainActivity" />

    </data>

    <LinearLayoutxmlns:tools="http://schemas.android.com/tools"

        android:id="@+id/rootView"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="vertical"

        android:padding="16dp">

            <android.support.v7.widget.AppCompatButton

                android:id="@+id/dataBinding"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:onClick="@{handlers::dataBindingOnClick}"

                android:text="DataBinding 绑定 OnClickListener"

                android:textAllCaps="false" />

</LinearLayout>

</layout>

android:onClick 属性值为“@{handlers::dataBindingOnClick}”,意为该按钮的点击处理逻辑为 handlers 对象的dataBindingOnClick方法,其中 handlers 对象是 MainActivity 的实例.

然后在对应的Java文件中声明android:onClick属性指定的方法dataBindingOnClick:

public void dataBindingOnClick(View view) {

    //do something

}

注意:该方法必须有且仅有一个View类型的参数。

这种方式,也是目前新流行的一种使用方式。

关于DataBinding 更详细的用法请参考官网:https://developer.android.com/topic/libraries/ data-binding/index.html。

由于全埋点重点解决的是控件的点击行为数据,所以了解控件都能设置哪些listener,以及设置或者绑定 listener 的不同方式,对于我们研究或者选择全埋点的方案,都会有非常大的帮助。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。