ViewMapping让你少写绑定View的代码

本文介绍了一种使用ViewMappingUtil类的方法,该类能够将Android布局文件映射到对象上,简化了对象与布局之间的交互。通过使用ViewMapping注解,开发者可以轻松地将布局ID与类中的成员变量关联起来,实现快速布局映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.lang.reflect.Field;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.wanmei.a9vg.common.ViewMapping;
public class ViewMappingUtil {
/**
* @description 用于在类上映射layout
* @param object
* @param context
*/
public static void mapView(Object object, Activity activity){
Context context = activity;
ViewMapping viewMapping = object.getClass().getAnnotation(ViewMapping.class);
View rootView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(viewMapping.id(), null);
activity.setContentView(rootView);
mapView(object, rootView);
}
public static void mapView(Object object, View rootView){
startReflect(object, rootView, object.getClass());
}
public static void mapView(Object object, View rootView, int layer){
startReflect(object, rootView, object.getClass());
Class<?> clazz = object.getClass().getSuperclass();
for(int i = 0;i < layer - 1; i++, clazz = clazz.getSuperclass()){
startReflect(object, rootView, clazz);
}
}
private static void startReflect(Object object, View rootView, Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
ViewMapping viewMapping;
for(Field field: fields){
viewMapping = field.getAnnotation(ViewMapping.class);
int id = 0;
if(viewMapping != null){
try {
id = viewMapping.id();
field.setAccessible(true);
field.set(object, rootView.findViewById(id));
} catch (Exception e) {
throw new RuntimeException(id + " map error!");
}
}
}
}
public static View mapView(Object object, Context context){
return mapView(object, context, null, false);
}
public static View mapView(Object object, Context context, ViewGroup parent, boolean isAttach){
ViewMapping viewMapping = object.getClass().getAnnotation(ViewMapping.class);
View rootView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
viewMapping.id(), parent, isAttach);
mapView(object, rootView);
return rootView;
}
}
用于标记方法
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface ViewMapping {
int id();
}
@ViewMapping(id = R.id.findListView)
private RefreshListView gameListView;
@ViewMapping(id = R.id.searchAndRegisteBtn)
private Button searchRegistButton;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.find_fragment_main, null);
ViewMappingUtil.mapView(this, rootView);
initTopbar();
initLoadingHelper();
setViewActions();
setAdapter();


return rootView;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值