您的位置:首页 > 其它

[置顶] 注解学习之初始化布局及控件2

2015-11-25 10:05 295 查看
/**
* @author anqiansong
*初始化布局
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface InitContentView {

public int resId() default -1;
}
-----------------------------------------------
/**
* @author anqiansong
*初始化控件
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InitWidget {

public int id() default -1;
}
---------------------------------------------
public class InjectUtil {

/**注解解析
* @param activity
*/
public static void inject(Activity activity){
Class clazz=activity.getClass();
if(clazz.isAnnotationPresent(InitContentView.class));{
InitContentView contentView=(InitContentView) clazz.getAnnotation(InitContentView.class);
try {
Method method=clazz.getMethod("setContentView", int.class);
int id=contentView.resId();
method.invoke(activity, id);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Field[] fields=clazz.getDeclaredFields();
if(fields!=null){
for(Field field:fields){
if(field.isAnnotationPresent(InitWidget.class)){
InitWidget widget=field.getAnnotation(InitWidget.class);
int id=widget.id();
if(id>0){
field.setAccessible(true);
try {
field.set(activity, activity.findViewById(id));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}

}
}
}
}
-----------------------------------------------
@InitContentView(resId=R.layout.activity_main)
public class MainActivity extends Activity {
@InitWidget(id=R.id.textView)
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InjectUtil.inject(this);
tv.setText("这是一个注解例子");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: