关闭

Butter Knife(黄油刀)的基本使用

标签: android注解butterknife黄油刀
114人阅读 评论(0) 收藏 举报

出自:github,jake大神。附录上github地址 https://github.com/JakeWharton/butterknife

用途的话:绑定视图控件而作用的。

使用准备:

使用android studio

添加依赖,File->Project Structure->Dependencies->Library dependency 搜索butterknife即可

  使用Eclipse

添加jar包,网上都有

注意:1 使用as的可以使用插件,在AndroidStudio->File->Settings->Plugins->搜索Zelezny ,可以自动生成你需要的view对象,方便快捷。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键——>Generate——Generate utterKnife Injections

2 使用ec的需要配置下,不然不会生效,设置方法,请看——>点击打开链接

基本使用

1 绑定view

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

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

2 绑定资源文件

class ExampleActivity extends Activity {
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; // int or ColorStateList field
  @BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
  // ...
}
3 fragment使用

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(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);
    // TODO Use fields...
    return view;
  }
}
4 适配器中使用

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 {
    @BindView(R.id.title) TextView name;
    @BindView(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }
}
5 将多个view放进list或数组中

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
ButterKnife.apply(nameViews, DISABLE);
ButterKnife.apply(nameViews, ENABLED, false);
6 监听事件的绑定,比如这里button的onclick属性,参数可写可不写。也可以限制泛型。

<Button 
android:id="@+id/btn1"
android:layout_marginTop="10px"
android:layout_width="match_parent"
android:layout_height="70px"
android:background="#0F0"
android:onClick="submit"
/>
@OnClick(R.id.btn1)
void submit(){
	//...
}
@OnClick(R.id.submit)
void submit(View view) {
  // TODO submit data to server...
}
7 事件监听,限制泛型

@OnClick(R.id.submit)
public void sayHi(Button button) {
  button.setText("Hello!");
}
8 解绑(一般fragment中用)

  @Override public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
  }
9 如listview的onItemClick方法

  	//原来监听方法,有啥写啥
	@OnItemClick(R.id.listview)
	void onItemClick(AdapterView<?> parent, View view,
			int position, long id) {
			//...
	}
开始对9不是很理解,不知道是写原先回调方法的重载都行,后来发现是写一样的,就是相当于把override下面的方法写下就行。其他也是一样,有多个override就写多个bind

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				
			}
这里注意下,因为不少view是继承textView的,所以如果响应时间没写限制,或者写了高级的类名,可能会同事响应多个view。比如,button 是textview的子类,放写的是textview的类别,可能点击button也会生效

@OnClick({R.id.tv1,R.id.tv2,R.id.btn2,R.id.cb1,R.id.cb2})
void OnClick(TextView view){

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9218次
    • 积分:521
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1条
    最新评论