[置顶] 注解学习之初始化布局及控件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("这是一个注解例子"); } }
相关文章推荐
- asp.net类序列化生成xml文件实例详解
- liunx安装jdk冲突
- MyBatis 入门到精通(三) 高级结果映射
- 进度条制作
- 欢迎使用CSDN-markdown编辑器
- nankai100_2
- 基于Net-SNMP的Agent的开发和使用
- javascript获取transform中的属性值
- Python爬虫学习系列教程
- FlashRAID 发布 与PBlaze4共筑企业固态存储解决方案
- cocos2d-x 使用cocostudio创建的帧动画
- java 生成条形码
- [软件人生]关于劳动关系中如何保护自己
- 如何在Android使用图标字体?
- eclipse真机调试显示Target unknown的解决方法
- 推荐一款Mac上好用的Markdown编辑器
- PYTHON的CGIServer的进化
- Redhat 使用中文安装后更换为英文的设定
- js data() string构造方法 解决ie不兼容
- linux下的配置ip