今天给大家分享一下简化findViewById的写法,
大家在写代码的时候可能烦透了写 findViewById, 当然我们也可以利用相关注解框架来简写,比如ViewInject 去简化这个操作。
至于用ViewInject性能方面,这里不做介绍。
自定义一个ViewUtil类
public class ViewUtil { /** * activity.findViewById() * @param context * @param id * @return */ public static <T extends View> T findViewById(Activity context, int id){ return (T) context.findViewById(id); } /** * rootView.findViewById() * @param rootView * @param id * @return */ public static <T extends View> T findViewById(View rootView, int id) { return (T) rootView.findViewById(id); } }
使用
TextView textView = ViewUtil.findViewById(this, R.id.textView);
ImageView imageView = ViewUtil.findViewById(convertView, R.id.image);
这样利用了java泛型方法的类型推导特点,好处
1. 简化了`findViewById写法
2. 没有了会增加代码长度的类型转化。
这样就ok了。
如果我们想隐藏多个控件
可以在ViewUtil类中加上hide方法
/**
* 隐藏控件
*
* @param activity
* @param resourdId
*/
public static void hide(Activity activity, int... resourdIds) {
for (int id : resourdIds) {
View view = activity.findViewById(id);
if (view != null) {
view.setVisibility(View.GONE);
}
}
}
public static void hide(View parent, int... resourdIds) {
for (int id : resourdIds) {
View view = parent.findViewById(id);
if (view != null) {
view.setVisibility(View.GONE);
}
}
}
如果想显示,编写show方法
public static void show(Activity activity, int... resourdIds) {
for (int id : resourdIds) {
View view = activity.findViewById(id);
if (view != null) {
view.setVisibility(View.VISIBLE);
}
}
}
赋值方法:
public static void setText(Activity activity,int textViewId,String text){
if(activity ==null) return;
TextView textView = (TextView)activity.findViewById(textViewId);
if (textView!=null){
setText(textView,text);
}
}
public static void setText(TextView textView,String text){
textView.setText(text);
}
获取值方法:
public static String getText(TextView view) {
return view.getText().toString();
}
public static String getText(Activity activity, int viewId) {
return getText((TextView) activity.findViewById(viewId));
}
其他改变背景,设置输入状态,清除等相关方法写在ViewUtil类中,如需具体源码,请回复ViewUtil获取,或者回复工具类