注解学习之初始化布局及控件2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QQ243223991/article/details/50033131
/**
 * @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("这是一个注解例子");
    }
}

猜你喜欢

转载自blog.csdn.net/QQ243223991/article/details/50033131