package com.d3.d3xmpp.d3View; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.View; import android.view.Window; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; /** * @author MZH * ��Ӧֻ�̳�Activity������Ҫ����Fragment�ʼ̳�FragmentActivity��FragmentActivity�̳���Activity */ public abstract class D3Activity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(arg0); } public void setContentView(int layoutResID) { super.setContentView(layoutResID); initInjectedView(this); } public void setContentView(View view, LayoutParams params) { super.setContentView(view, params); initInjectedView(this); } public void setContentView(View view) { super.setContentView(view); initInjectedView(this); } private void initInjectedView(Activity activity) { initInjectedView(activity, activity.getWindow().getDecorView()); } private void initInjectedView(Object activity, View sourceView) { // System.out.println("create"); Field[] fields = activity.getClass().getDeclaredFields(); // ��ȡ�ֶ� if (fields != null && fields.length > 0) { for (Field field : fields) { try { field.setAccessible(true); // ��Ϊ�ɷ��� if (field.get(activity) != null) continue; D3View d3View = field.getAnnotation(D3View.class); if (d3View != null) { int viewId = d3View.id(); if (viewId == 0) viewId = getResources().getIdentifier(field.getName(), "id", getPackageName()); if (viewId == 0) Log.e("D3Activity", "field " + field.getName() + "not found"); // �ؼ�,ע���ʼ�����൱�� backBtn = (TextView) // findViewById(R.id.back_btn); field.set(activity, sourceView.findViewById(viewId)); // �¼� setListener(activity, field, d3View.click(), Method.Click); setListener(activity, field, d3View.longClick(), Method.LongClick); setListener(activity, field, d3View.itemClick(), Method.ItemClick); setListener(activity, field, d3View.itemLongClick(), Method.itemLongClick); } } catch (Exception e) { e.printStackTrace(); } } } } private void setListener(Object activity, Field field, String methodName, Method method) throws Exception { if (methodName == null || methodName.trim().length() == 0) return; Object obj = field.get(activity); switch (method) { case Click: if (obj instanceof View) { ((View) obj).setOnClickListener(new EventListener(activity).click(methodName)); } break; case ItemClick: if (obj instanceof AbsListView) { ((AbsListView) obj).setOnItemClickListener(new EventListener(activity).itemClick(methodName)); } break; case LongClick: if (obj instanceof View) { ((View) obj).setOnLongClickListener(new EventListener(activity).longClick(methodName)); } break; case itemLongClick: if (obj instanceof AbsListView) { ((AbsListView) obj).setOnItemLongClickListener(new EventListener(activity).itemLongClick(methodName)); } break; case focusChange: if (obj instanceof View) { ((View) obj).setOnFocusChangeListener(new EventListener(activity).focusChange(methodName)); } break; default: break; } } public enum Method { Click, LongClick, ItemClick, itemLongClick, focusChange } }