Android简化获取控件

Android简化获取控件

这里写图片描述

转载注明出处csdn chendong_


这只是一个工具类,现在有很多使用注解绑定控件的三方库,很强大,也很简单,这里使用的工具类仍然使用findViewById()的方法,只是起到了简化获取控件的过程。优点就是方法数少,不定义变量,特别适用于需要定义大量控件的情景。


简单使用

//初始化
BindViewHelper viewHelper = new BindViewHelper(this);//Activity初始化
BindViewHelper viewHelper = new BindViewHelper(parent);//父控件初始化


//链式编程添加别名映射
viewHelper.mapping("time",R.id.activity_time)
            .mapping("num",R.id.activity_num);


//使用别名获取控件
viewHelper.<TextView>get("time").setText("日期 2016-3-2");


//直接使用id获取控件
viewHelper.<TextView>get(R.id.activity_time).setText("日期 2016-3-2");


//如果遇到无法从Activity获取控件时,比如通过inflate拿到的控件,可以使用
viewHelper.<TextView>get(newParent,R.id.activity_time).setText("日期 2016-3-2");
viewHelper.<TextView>get(newParent,"time").setText("日期 2016-3-2");

源代码

/**
 * Created by 陈栋 on 16/4/5.
 * 功能:使用ID或者别名获取控件,仍旧使用findViewById()的方法.避免记录过多变量
 */
public class BindViewHelper {

    private View parent;
    private SparseArray<View> views;
    private HashMap<String, Integer> maps;

    /**
     * 添加别名,添加之后可以使用别名获取控件
     *
     * @param alias 别名
     * @param res   资源ID
     */
    public BindViewHelper mapping(String alias, int res) {
        if (maps == null) {
            maps = new HashMap<>();
        }
        maps.put(alias, res);
        return this;
    }


    public BindViewHelper(Activity activity) {
        this.parent = activity.getWindow().getDecorView();
        this.views = new SparseArray<>();
    }


    public BindViewHelper(View view) {
        this.parent = view;
        this.views = new SparseArray<>();
    }


    /**
     * 根据别名获取控件
     *
     * @param newParent 父控件,如果该控件不能从Activity中获取
     * @param resID     资源id
     * @param <T>       控件类型范型
     * @return 控件
     */
    public <T extends View> T get(View newParent, int resID) {
        T t = (T) views.get(resID);
        if (t == null) {
            t = (T) newParent.findViewById(resID);
            views.put(resID, t);
        }
        return t;
    }


    /**
     * 根据资源id获取控件
     *
     * @param resID 资源id
     * @param <T>   控件类型范型
     * @return 控件
     */
    public <T extends View> T get(int resID) {
        T t = (T) views.get(resID);
        if (t == null) {
            t = (T) parent.findViewById(resID);
            views.put(resID, t);
        }
        return t;
    }


    /**
     * 根据别名获取控件
     *
     * @param alias 别名
     * @param <T>   控件类型范型
     * @return 控件
     */
    public <T extends View> T get(String alias) {
        Integer key = maps.get(alias);
        T t = (T) views.get(key);
        if (t == null) {
            t = (T) parent.findViewById(key);
            views.put(key, t);
        }
        return t;
    }

    /**
     * 根据别名获取控件
     *
     * @param newParent 父控件,如果该控件不能从Activity中获取
     * @param alias     别名
     * @param <T>       控件类型范型
     * @return 控件
     */
    public <T extends View> T get(View newParent, String alias) {
        Integer key = maps.get(alias);
        T t = (T) views.get(key);
        if (t == null) {
            t = (T) newParent.findViewById(key);
            views.put(key, t);
        }
        return t;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值