定义注解
//定义注解类型:类,属性,方法
@Target(ElementType.FIELD)
//注解可见时候,一般运行时可见
@Retention(RetentionPolicy.RUNTIME)
public @interface Id {
}
使用注解
public class Bean {
@Id
private int id;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
}
注解定位和反射取值
public class Use{
public int a;
public void setA(Bean bean){
Class clazz = bean.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field:fields){
if (field.getAnnotation(Id.class) != null){
field.setAccessible(true);
a = field.getInt(bean);
}
}
}
}
ButterKnife
1.配置:
compile ‘com.jakewharton:butterknife:6.1.0’
2.绑定事件:
activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_butter_knife);
ButterKnife.inject(this);
}
fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view);
return view;
}
这个必须记得在onDestroyView中重置一下ButterKnife.reset(this);
viewHolder:
public static class ViewHolder {
public ViewHolder(View view) {
ButterKnife.inject(this, view);
}
@InjectView(R.id.person_name) TextView name; @InjectView(R.id.person_age) TextView age; }
3.功能:
- 不用写findViewById
id找不到时会在编译时报错,view变量声明不能为private,static
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
- 不用写setOnClickListener
还有ListView的@OnItemClick, CheckBox的@OnCheckedChanged等;
方法不能为private,static;
可绑定多个id;所以Listener参数都是optional,可写可不写;
@OnClick({R.id.button,R.id.button2})
void finishA(View view) {
finish();
}
- 组建View List
可同时获取多个view放入list
@InjectViews({R.id.first_name, R.id.middle_name, R.id.last_name})
List nameViews;
4.apply()方法(要用再说)
共有3种形式:即Action, Setter和Property三种