【Android 进阶】ButterKnife-黄油刀

本文介绍了Android开发中的ButterKnife框架,它是一个强大的View绑定和Click事件处理工具,能简化代码并提高开发效率。通过添加插件和依赖,开发者可以轻松在Activity、Fragment和Adapter中使用ButterKnife,避免手动查找视图和设置监听器,提高代码可读性和效率。

现在养成了一个好习惯,每当我学习了一个新东西,总想要记录下来。记录的过程其实就是对知识的一次梳理,可以查漏补缺。
而记录下来也是为了方便以后的重温,毕竟人的遗忘曲线还是很恐怖的。

黄油刀-ButterKnife是什么?

ButterKnife是注解框架中相对简单易懂的很不错的开源框架

为什么要学习并使用ButterKnife呢?

1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2.方便的处理Adapter里的ViewHolder绑定问题
3.运行时不会影响APP效率,使用配置方便
4.代码清晰,可读性强

开源地址:

https://github.com/JakeWharton/butterknife

使用准备:

1)在Setting->Plugins中输入butterknife添加插件
Android ButterKnife Aelezny ->点击安装
这里写图片描述
2)在Module里的build.gradle里面添加
compile ‘com.jakewharton:butterknife:7.0.1’

常用功能:

1.省略findViewById()
(1)Activity中使用
**以前:**mTextView = (TextView) findViewById(R.id.butter_text_view);

现在:
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
在设置好布局之后调用:
ButterKnife.inject(this);当前视图与ButterKnife绑定。

注意:
View变量声明的时候不能为private或者static.

(2)Fragment中使用
示例代码:

public class SimpleFragment extends Fragment {

    @InjectView(R.id.fragment_text_view)
    TextView mTextView;

    public SimpleFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_simple, container, false);
        ButterKnife.inject(this, view);
        mTextView.setText("在使用黄油刀");
        return view;
    }
}

(3)Adapter ViewHolder中使用
示例代码:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.person_item_layout, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        Person person = getItem(position);
        if (null != person) {
            holder.name.setText(person.getName());
            holder.age.setText(String.valueOf(person.getAge()));
            holder.location.setText(person.getLocation());
            holder.work.setText(person.getWork());
        }

        return convertView;
    }

    static class ViewHolder {
        @InjectView(R.id.person_name)
        TextView name;
        @InjectView(R.id.person_age)
        TextView age;
        @InjectView(R.id.person_location)
        TextView location;
        @InjectView(R.id.person_work)
        TextView work;

        public ViewHolder(View view) {
            ButterKnife.inject(this, view);
        }
    }

2.省略setOnClickListener()
以前:

mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

现在:

@OnClick(R.id.button)
void doSomethings(View view) {  //参数可以省略
        dothings();
    }
.
.
.
ButterKnife.inject(this);//布局文件与黄油刀最终绑定

注意:
1.这里方法仍然不能是private和static, 并且可以有一个参数View,也可不写.
2.ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged也可以实现省略操作

3.可以一次指定多个id,为多个View绑定一个事件处理方法
示例:

@OnClick({R.id.button_1, R.id.button_2, R.id.button_3, R.id.button_4})
void buttonsClicked() {
    Toast.makeText(this, "四个按钮同一个效果哈", Toast.LENGTH_SHORT).show();
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值