首页 > 其他 > 详细

注解&反射View注入

时间:2020-11-03 16:55:12      阅读:29      评论:0      收藏:0      [点我收藏+]

通过注解&反射技术实现View注入(Android)

1.在Activity中的应用

public class AnnotationReflectActivity extends AppCompatActivity {


    @InjectView(R.id.tv_show)
    TextView tvShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_annotation_reflect);
InjectUtils.injectView(this);//方法调用 tvShow.setText("tv show."); } }

 2.注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectView {

    @IdRes int value();
}

3.反射

public class InjectUtils {
    
    public static void injectView(Activity activity) {

        Class<? extends Activity> clazz = activity.getClass();

        //clazz.getFields() 获得自己+父类的成员(父类不包括private,只是public)
        //clazz.getDeclaredFields() 获得自己的成员

        Field[] declaredFields = clazz.getDeclaredFields();
        for (Field field : declaredFields) {
            if(field.isAnnotationPresent(InjectView.class)) {

                InjectView injectView = field.getAnnotation(InjectView.class);

                //获得注解中设置的id
                int id = injectView.value();
                View view = activity.findViewById(id);

                //设置访问权限,允许操作private属性
                field.setAccessible(true);

                try {
                    //反射赋值
                    field.set(activity, view);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  

注解&反射View注入

原文:https://www.cnblogs.com/heibingtai/p/13920251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!