【注解】使用注解来代替findViewById

2020-03-04  本文已影响0人  秀叶寒冬

本文是使用注解代替findViewById的简单使用,在此之前,必须要了解什么是元注解,元注解有哪些,作用是什么?

注解的概念是java5.0提出来的,元注解主要有四种:

具体可参考:【注解】自定义注解及元注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by yds
 * on 2020/3/4.
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BindView {
    int value();
}

import android.app.Activity;

import androidx.annotation.NonNull;
import androidx.annotation.UiThread;

import java.lang.reflect.Field;

/**
 * Created by yds
 * on 2020/3/4.
 */
public class DragonFly {
    @NonNull
    @UiThread
    public static void bind(@NonNull Activity target) {
        Class<?> clazz = target.getClass();
        Field[] fields = clazz.getDeclaredFields();
        if (fields == null || fields.length == 0) {
            return;
        }
        for (Field field : fields) {
            if (field.isAnnotationPresent(BindView.class)) {
                BindView bindView = field.getAnnotation(BindView.class);
                int value = bindView.value();
                if (value > 0) {
                    field.setAccessible(true);
                    try {
                        field.set(target, target.findViewById(value));
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

}

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.example.annotationdemo.annotationdefine.BindView;
import com.example.annotationdemo.annotationdefine.DragonFly;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.tv)
    private TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DragonFly.bind(this);

        mTextView.setText("测试");
    }
}

上一篇 下一篇

猜你喜欢

热点阅读