美文网首页
一步一步手撸Android通用框架 (三)

一步一步手撸Android通用框架 (三)

作者: 844b9a3a3a68 | 来源:发表于2017-12-23 15:11 被阅读563次

自定义注解

因为这里要用到反射知识,所以不熟悉反射的需要去复习下哦。

新建包injection,在包下定义注解类Id

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Id {
    /**
     * 需要绑定的控件id
     *
     * @return
     */
    int value();

}

再新建注解解析类FindView(注释详细,应该大家能看懂吧):

/**
 * 注解获取Id解析类
 * Created by Chao on 2017-12-23.
 */

public class FindView {

    public static void bind(Object context) {
        Activity at = null;
        //判断传入的context实例
        if (context instanceof Activity) {
            at = (Activity) context;
        } else if (context instanceof Fragment) {
            Fragment fr = (Fragment) context;
            at = fr.getActivity();
        }
        // 获取这个activity中的所有成员变量
        Field[] fields = at.getClass().getDeclaredFields();
        for (Field field : fields) {
            // 获取该变量上面有没有打这个注解
            Id mId = field.getAnnotation(Id.class);
            if (mId != null) {// 有此注解
                int id = mId.value();// 获取注解值
                if (id != 0) {
                    field.setAccessible(true);
                    Object view = null;
                    try {
                        view = at.findViewById(id);// 根据注解ID在Activity布局查找控件
                        // 设置字段的属性
                        field.set(at, view);// 在at中将field变量设置值view
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

然后在BaseActivity中bind

    private void init() {
        FindView.bind(this);
        initView();
        initData();
        initListener();
    }

测试:

测试注解 模拟器展示

测试成功,以后我们只需要在我们的Activity控件加上@Id即可找到ID,当然控件监听也是一个道理,你们可以自己扩展哦。

源码地址:https://github.com/zhangzhichaolove/BasicsFrame

相关文章

网友评论

      本文标题:一步一步手撸Android通用框架 (三)

      本文链接:https://www.haomeiwen.com/subject/rskqgxtx.html