xUtils 一个 Android 公共库框架,主要包括四个部分:View,Db, Http, Bitmap 四个模块。
View 模块主要的功能是通过注解绑定 UI,资源,事件。
Db 模块是一个数据库 orm 框架, 简单的语句就能进行数据的操作。
Http 模块主要访问网络,支持同步,异步方式的请求,支持文件的下载。
Bitmap 模块是加载图片以及图片的处理, 支持加载本地,网络图片。而且支持图片的内存和本地缓存。
本篇文章主要介绍ViewUtils。
一。在ACtivity中用ViewUtils注解:
之前我们写项目时,必不可少的步骤就是设置布局文件、找控件,我们的做法是在MainActivity中的onCreate()中setContentView(R.layout.activity_main)、findViewById();我们可以用注解的方式实现这些步骤。注解的步骤主要有:
@ContentView(R.layout.main):相当于setContentView();写在类的上面,注意不用用分号
@ViewInject(R.id.textView) 相当于findViewById();写在对应空间的上面,
@ViewUtils.inject(this);让注解生效,写在onCreate()或其他方法中,
这就是最基本的注解的用法了,具体实例如下:
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.textView)
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 让注解生效
ViewUtils.inject(this);
textView.setText("ViewUtils载入成功");
}
}
二。在Fragment中用注解:
在Fragment中绑定控件时,让注解生效的参数不同:
ViewUtils.inject(handler,view);
第一个参数表示持有者,一般传this,具体实例如下:
public class BlankFragment extends Fragment {
public BlankFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_blank2, container, false);
}
@ViewInject(R.id.fragment_text)
private TextView textView;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewUtils.inject(this, view);
textView.setText("Fragment绑定成功");
}
}
三。在Adapter中使用ViewUtils
在Adapter中绑定时,绑定convertView,具体代码如下:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
convertView= LayoutInflater.from(context).inflate(R.layout.adapter_layout,null);
convertView.setTag(new ViewHolder(convertView));
}
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.textView.setText(list.get(position));
return convertView;
}
public static class ViewHolder{
@ViewInject(R.id.textView_adapter)
private TextView textView;
public ViewHolder(View itemView){
//1参:持有者,2参容易理解
ViewUtils.inject(this,itemView);
}
}
四。资源的绑定,当我们要使用系统的资源时,原始的方式是:
String appName = getResource().getString(R.String.app_name);
用注解绑定时:用@ResInject(id,values),代码如下:
@ResInject(id=R.string.app_name,type = ResType.String)
private String appName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 让注解生效
ViewUtils.inject(this);
textView.setText("xUtils载入成功"+appName);
}
五。用注解对onClick()方法进行绑定。
当绑定监听方法时应当注意,这些方法必须是在xUtils包中classes.jar/com.lidroid.xutils/view/annotion/event中存在的,否则需要自定义注解。绑定用@onClick(int[]id,int parentId[]),具体如下:
@OnClick(R.id.textView)public void click(View v){
Toast.makeText(MainActivity.this, "您点击了TextView", Toast.LENGTH_SHORT).show();
}
这里需要注意:1.id的个数必须和parent Id的个数保持一致;2.parentId默认为0,可不写
六。自定义注解
如果我们想对一些xUtils中没有提供的监听方法通过注解绑定时,可自定义注解,这里以SwipeRefreshLayout的下拉刷新为例。
1.新建一个类,选择Annotation。
2. 定义注解:
//注解使用的目标:方法
@Target(ElementType.METHOD)
//注解什么时候运行:运行时运行
@Retention(RetentionPolicy.RUNTIME)
//有三个参数
@EventBase(
//注解的接口类型
listenerType = SwipeRefreshLayout.OnRefreshListener.class,
//set方法的名字
listenerSetter = "setOnRefreshListener",
//方法的名字,是接口对象调用的方法名
methodName = "onRefresh"
)
//仿照提供的ViewUtils中的方法注解写上属性
public @interface Refresh {
int[] value();
int[] parentId() default{0};
}
3.在主函数中写一个方法,用注解绑定即已完成自定义:
@Refresh(R.id.fragment_refresh)
private void click() {
Toast.makeText(getActivity(), "正在刷新", Toast.LENGTH_SHORT).show();
handler.sendEmptyMessageAtTime(0,3000);
}
综上所述,注解可用于修饰类、方法、参数、属性。