package com.d3.d3xmpp.d3View; import java.lang.reflect.Field; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; /** * @author MZH * */ public abstract class D3Fragment extends Fragment { public View setContentView(LayoutInflater inflater,int layoutResID) { View view = inflater.inflate(layoutResID, null); initInjectedView(this,view); return view; } private void initInjectedView(Object framgent,View sourceView){ Field[] fields = framgent.getClass().getDeclaredFields(); //��ȡ�ֶ� if(fields!=null && fields.length>0){ for(Field field : fields){ try { field.setAccessible(true); //��Ϊ�ɷ��� if(field.get(framgent)!= null ) continue; D3View d3View = field.getAnnotation(D3View.class); if(d3View!=null){ int viewId = d3View.id(); if(viewId == 0) viewId = getResources().getIdentifier(field.getName(), "id",getActivity().getPackageName()); if(viewId == 0) Log.e("D3Activity", "field "+ field.getName() + "not found"); //�ؼ�,ע���ʼ�����൱�� backBtn = (TextView) findViewById(R.id.back_btn); field.set(framgent,sourceView.findViewById(viewId)); //�¼� setListener(framgent,field,d3View.click(),Method.Click); setListener(framgent,field,d3View.longClick(),Method.LongClick); setListener(framgent,field,d3View.itemClick(),Method.ItemClick); setListener(framgent,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 } }