dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
testCompile 'junit:junit:4.12'
}
compile 'com.android.support:support-annotations:xx.x.x'
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String s = null;
test(s);
}
public void test(@NonNull String s){
System.out.println(s);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testString(112312);
testString(R.string.app_name);
}
public void testString(@StringRes int s){
System.out.println(s);
}
}
@Target(ElementType.FIELD) //解析常量
@Retention(RetentionPolicy.RUNTIME) //运行时
public @interface BindView {
int value() default -1; //标识控件
}
/**
* Created by Litp on 2017/2/17.
*/
public class BindViewParser {
/**
* 传递activty或者View 对象,使用反射获取view变量
* @param object
*/
public static void inject(Object object) {
try {
parse(object);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解析获取值
* @param object
* @throws Exception
*/
public static void parse(Object object) throws Exception {
final Class<?> clazz = object.getClass();
View view = null;
//获取clazz的变量,不论private还是public
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
//这个变量 是否有BindView注解
if (field.isAnnotationPresent(BindView.class)) {
//获取这个变量对应的注解
BindView injectView = field.getAnnotation(BindView.class);
//获取值
int id = injectView.value();
if (id <= 0) {
throw new Exception("View的id不能为空");
} else {
//设置可以访问
field.setAccessible(true);
//获取view
if (object instanceof View) {
view = ((View) object).findViewById(id);
} else if (object instanceof Activity) {
view = ((Activity) object).findViewById(id);
}
//设置View
field.set(object, view);
}
}
}
}
}
public class MainActivity extends AppCompatActivity {
//使用注解标识变量
@BindView(R.id.tv_test)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//传递当前activty给解析器,进行初始化view
BindViewParser.inject(this);
//这里就已经是初始化完毕了,可以进行使用了
textView.setText("测试自己的注入demo");
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有