返回

Butterknife 8.8.1使用之简单浅析及源码浅析

Android

前言

Butterknife 8.8.1是一个流行的Android库,它允许我们通过注解的方式来绑定控件,从而简化代码并提高开发效率。本文将深入浅出地介绍ButterKnife 8.8.1的用法,涵盖Activity和Fragment中的使用场景,并对源码进行了详细分析。

依赖引入

implementation 'com.jakewharton:butterknife:8.8.1'

混淆

如果我们想混淆ButterKnife 8.8.1,我们需要在proguard-rules.pro文件中添加以下配置:

-keep class butterknife.** { *; }

一、Activity中使用

1. 基础使用

@BindView(R.id.button)
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do something
        }
    });
}

2. 多事件

@BindView(R.id.button)
Button button;

@OnClick({R.id.button1, R.id.button2})
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button1:
            // Do something
            break;
        case R.id.button2:
            // Do something
            break;
    }
}

二、Fragment中使用

public class MyFragment extends Fragment {

    @BindView(R.id.button)
    Button button;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);
        ButterKnife.bind(this, view);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something
            }
        });

        return view;
    }
}

附:使用Fragment

ButterKnife 8.8.1可以与Fragment一起使用,但我们需要做一些额外的配置。首先,我们需要在Fragment的类定义中添加以下代码:

@BindViews(R.id.button1, R.id.button2)
List<Button> buttons;

然后,我们需要在Fragment的onCreateView方法中添加以下代码:

ButterKnife.bind(this, view);

现在,我们就可以使用ButterKnife 8.8.1来绑定Fragment中的控件了。

三、源码浅析

ButterKnife 8.8.1的源码非常简单,它主要由以下几个类组成:

1. ButterKnife

这个类是ButterKnife 8.8.1的核心类,它负责绑定控件和处理注解。

2. ButterKnifeProcessor

这个类是一个注解处理器,它负责生成绑定控件的代码。

3. BindView

这个注解用于标记要绑定的控件。

4. OnClick

这个注解用于标记要绑定的点击事件。

ButterKnife 8.8.1的工作原理如下:

1. 当我们使用ButterKnife 8.8.1时,ButterKnifeProcessor会自动生成绑定控件的代码。

2. 然后,当我们编译项目时,生成的绑定控件的代码会被编译成字节码。

3. 当我们运行项目时,ButterKnife 8.8.1的代码会被加载到内存中。

4. ButterKnife 8.8.1的代码会扫描我们的代码,并找到所有被@BindView和@OnClick注解标记的控件和方法。

5. ButterKnife 8.8.1会将这些控件和方法绑定在一起,这样我们就可以通过注解的方式来使用控件和方法了。

ButterKnife 8.8.1是一个非常强大的库,它可以让我们更轻松地开发Android应用程序。