简单的butterknife使用方法

  第一次写博客。内容也是自己这几天正在看的知识。可能有些地方自己理解有错。望大家提出来。butterknife是一个开源框架。利用它,我们的程序会变得简洁很多。方法就在下面贴出来咯。

一、解放控件对象实例化

1、几种控件的基本使用

class  ExampleActivity  extends  Activity{
  @Bind(R.id.ok_btn) //控件对应的ID Button mBtn;
  @Bind(R.id.title)TextView title;
  @BindString(R.string.title)String title;
  @BindDrawable(R.drawable.graphic)Drawable graphic;
  @BindColor(R.color.red)int red;
}

2.Activity
使用 ButterKnife,你只需要在代码中 使用注解方式进行对象申明,然后在 setContentView() 之后调用一句话,那么申明的所有对象自动创建出来。

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // 注意此处的 ButterKnife.bind(this);
  }
}

3、framment
调用时要多加一个root view参数。Fragegment使用时记得同时继承onDestroyView,并在其中将ButterKnife.unbind

public class FancyFragment extends Fragment {
  @Bind(R.id.button1) Button button1;
  @Bind(R.id.button2) Button button2;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
    // 注意此处比activity多一个view参数 ButterKnife.bind(this, view);
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    //记住在onDestroyView()中ButterKnife.unbind(this);
    ButterKnife.unbind(this);
  }
}

4、Adapter

public class MyAdapter extends BaseAdapter {
  @Override public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    if (view != null) {
      holder = (ViewHolder) view.getTag();
    } else {
      view = inflater.inflate(R.layout.whatever, parent, false);
      holder = new ViewHolder(view);
      view.setTag(holder);
    }

    holder.name.setText("John Doe");
    // etc...

    return view;
  }

  static class ViewHolder {
    @Bind(R.id.title) TextView name;
    @Bind(R.id.job_title) TextView jobTitle;

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

5、控件数组

@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })List<EditText> nameViews;

二、解放监听添加
1、Listeners can also automatically be configured onto methods.
(Listeners 可以自动配置方法)

@OnClick(R.id.submit)
public void submit(View view){
// TODO submit data to server...}

2、All arguments to the listener method are optional.
(所有监听器的参数都是可选的)

@OnClick(R.id.submit)
public void submit(){
// TODO submit data to server...}

3、Define a specific type and it will automatically be cast.
(定义一个特定的类,他将自动转换)

@OnClick(R.id.submit)
  public void sayHi(Button button){
  button.setText("Hello!");
  }

4、Specify multiple IDs in a single binding for common event handling.
(指定多个ID在同一个监听事件中)

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door){
    if(door.hasPrizeBehind())
    {
        Toast.makeText(this,"You win!", LENGTH_SHORT).show();}else{Toast.makeText(this,"Try again", LENGTH_SHORT).show(); }
    }

5、Custom views can bind to their own listeners by not specifying an ID.
(自定义视图可以不指定ID来绑定自己的听众)

public class FancyButton extends Button{
@OnClick public void onClick(){
// TODO do something!}
}

6、Listview的监听

@OnItemSelected(R.id.list_view)
void onItemSelected(int position){
// TODO ...
}

@OnItemSelected(value = R.id.maybe_missing, callback = NOTHING_SELECTED)
void onNothingSelected(){
// TODO ...
}

三、关于异常
默认情况下 @Bind和@OnClick都是必须加上的,如果当前对象不存在,就会抛出一个异常
为了压制这个异常,可以在变量或者方法上加入一下注解@Nullable

@Nullable@Bind(R.id.might_not_be_there)TextView mightNotBeThere;
@Nullable@OnClick(R.id.maybe_missing)
void onMaybeMissingClicked(){// TODO ...}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值