Android高级之xUtils框架(一):ViewUtils的用法

时间:2022-02-27 20:41:56

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);
    }

综上所述,注解可用于修饰类、方法、参数、属性。