像jQuery一样搞定findViewById

Android开发过程中,最常用的操作就是findViewById,长长的一串使人不禁想到JavaScript当中的document.getElementById,findViewById虽然字更少,但是麻烦的是需要转型。那么有没有一种方法,可以写得更少,又不用转型呢。

启发我的是jQuery对DOM的操作,一个$符号就完成了,然后我想,findViewById也是一个符号搞定,那势必很爽。于是就出现了第一个版本:

public View $(int id){
		return super.findViewById(id);
	}

这样使用起来已经有一定程度的简化了:

TextView tv = (TextView) $(R.id.textView);

但是那讨厌的转型还是存在。如果能在方法内部完成转型后返回,那势必更爽,于是想到使用Java中的泛型:

public <T extends View> T $(int id){
		View v = null;
		try {
			v = super.findViewById(id);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		return (T) v;
	}

这样使用起来就顺眼和简单多了:

TextView tv = $(R.id.textView);

可是仍然不满足,传入的参数太长,而且R.id都是重复的,如果能只写id后面的内容(也就是在XML文件中定义时写的内容),不是能更进一步简化代码吗?

这里用到了反射,就不讲原理了,直接上代码:

public <T extends View> T $(String name){
		View v = null;
		try {
			v = findViewById(R.id.class.getField(name).getInt(null));
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}		
		return (T) v;
	}

使用起来自然是简单粗暴:(看上去也更像jQuery)

TextView textView = $("textView");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值