《Android全埋点解决方案》 —1.2 View 绑定listener 方式
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 的不同方式,对于我们研究或者选择全埋点的方案,都会有非常大的帮助。
- 点赞
- 收藏
- 关注作者
评论(0)