Android 高效的`InjectView – ButterKnife`

在日常的Android 重复、大量的view初始化、绑定、监听等工作总会让人觉得很繁琐。这时候使用依赖注入的开源框架ButterKnife就很有必要了。

本篇简单一种高效的View绑定方式InjectView – ButterKnife

InjectView简介

传统的findViewById接收一个int类型的id参数,然后遍历找到对应的View但是写法过于麻烦。

InjectView 是一种基于反射的绑定方式。通过annotation,我们可以把int类型的id声明在对应的filed上面,通过

java的反射,遍历每个field,找到对应的id。


@InjectView(R.id.textView) View textView;  

但是这个方法相对于正常的方法调用,在执行效率上会有些劣势,而且反射并不能编译时期的优化,使得性能的差距更加明显。

ButterKnife简介

ButterKnife是一种比较高效的InjectView,它是通过AnnotationProcessor实现的View Injection而不是反射所以性能上没有什么顾虑。

http://jakewharton.github.io/butterknife/

ButterKnife使用

对于IDE的自动格式化代码,可能会强行将Annotation单独在一行显示。


@InjectView(R.id.textView) 
View textView;  

你也可以进行相应的配置,IDE配置 (Android studio)

outPut

  • 注入

ButterKnife.inject(this);
在7.0.0版本中,注册方式也作了改变,变成了
ButterKnife.bind(this);

注:本文用的为4.0版本

Activity


public class MainActivity extends Activity {

    @InjectView(R.id.tv_token)
    TextView tv_token;

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

        ButterKnife.inject(this);


    }

}

Fragment


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

        };

OnClick


    @OnClick({R.id.tv_token})
    void onClick(View view){
        switch (view.getId()){
            case R.id.tv_token:
                 Toast.makeText(this, "click!", Toast.LENGTH_SHORT).show();
                break;

        }
    }

posted @ 2018-09-17 14:56  可爱的黑精灵  阅读(2054)  评论(0编辑  收藏  举报