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