Butter Knife 实用的注解框架

最近注解这个服务器端运用的技术,越来越多的在app的开发中提起,原因很简单,现在app变得越来越庞大了,注解这种方式还是有使用的价值,代码编写可以很方便,整个代码会变的很简洁。现在给大家介绍的注解框架Butter Knife,关于他的介绍http://jakewharton.github.io/butterknife/

功能

Butter Knife主要拿来注解替代findViewById 的操作,实现方式也超级简单

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.title)TextView title;
    @Bind(R.id.subtitle)TextView subTitle;
    @Bind(R.id.image)ImageView image;
    @Bind(R.id.listView)ListView listView;

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

声明控件时用@Bind 注解id,onCreate()中调用ButterKnife.bind 就完成了注解,这里的this是当前的Activity,当然我们可以直接注解View的id实现方式也超级简单

public class SecondActivityFragment extends Fragment {

    @Bind(R.id.title)TextView title;
    @Bind(R.id.subtitle)TextView subTitle;
    @Bind(R.id.image)ImageView image;

    public SecondActivityFragment() {
    }

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

典型的Fragment中的注解方式 ButterKnife.bind(this,view); 变化一下方式就可以让我们注解View。这2个例子都还是在Activity中,再看看下面这个例子

public class MyAdapter extends BaseAdapter {

    Context context;
    LayoutInflater inflater;

    public MyAdapter(Context context) {
        this.context = context;
        inflater = LayoutInflater.from(context);

    }

...省去不重要代码

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.list_item,parent,false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }
        holder.title.setText("");
        holder.subtitle.setText("");
        return convertView;
    }

    static  class ViewHolder{
        @Bind(R.id.title)TextView title;
        @Bind(R.id.subtitle)TextView subtitle;

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

这才是注解View而不是Activity或者Fragment。需要也别强调一点Butter Knife注解并不是反射代码去实现,它会生成如下代码

public void bind(ExampleActivity activity) {
  activity.subtitle = (android.widget.TextView) activity.findViewById(2130968578);
  activity.image= (android.widget.TextView) activity.findViewById(2130968579);
  activity.title = (android.widget.TextView) activity.findViewById(2130968577);
}

跟我们在代码中写findViewById 其实是一样的,只不过它帮你自动生成。这一点需要特别记住,你要明白其实你做了findViewById 的操作。

事件

仅仅注解findViewById 功能也太少了,它还可以注解事件,具体哪些事件呢?
这里写图片描述

来看看最简单的OnClick,就跟我们在layout布局中写android:onClick="" 然后在代码中写点击时间一样。

@OnClick(R.id.submit)
public void submit(View view) {
     ...
}

这里写了参数(View view) 方法里面的参数你可以完全自己决定,比如你也可以不写

@OnClick(R.id.submit)
public void submit() {
     ...
}

可以多个控件注解同一个事件

    @OnClick({R.id.title,R.id.subtitle})
    public void click(View v){
        Toast.makeText(this,"hehe",Toast.LENGTH_SHORT).show();
    }

最后用一个ListView的OnItemClick事件结尾

    @OnItemClick(R.id.listView)
    public void OnItemSelected(int position){
        Toast.makeText(this,"hehe"+position,Toast.LENGTH_SHORT).show();
    }

是不是觉得很简单,Butter Knife就是一个这么好用的注解框架,它绝对会让你爱不释手的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值