/** * Copyright (c) 2012-2013, Michael Yang 杨福海 (www.yangfuhai.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.tsz.afinal; import java.lang.reflect.Field; import net.tsz.afinal.annotation.view.EventListener; import net.tsz.afinal.annotation.view.Select; import net.tsz.afinal.annotation.view.ViewInject; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; public class FinalActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void setContentView(int layoutResID) { super.setContentView(layoutResID); initView(); } public void setContentView(View view, LayoutParams params) { super.setContentView(view, params); initView(); } public void setContentView(View view) { super.setContentView(view); initView(); } private void initView(){ Field[] fields = getClass().getDeclaredFields(); if(fields!=null && fields.length>0){ for(Field field : fields){ ViewInject viewInject = field.getAnnotation(ViewInject.class); if(viewInject!=null){ int viewId = viewInject.id(); try { field.setAccessible(true); field.set(this,findViewById(viewId)); } catch (Exception e) { e.printStackTrace(); } String clickMethod = viewInject.click(); if(!TextUtils.isEmpty(clickMethod)) setViewClickListener(field,clickMethod); String longClickMethod = viewInject.longClick(); if(!TextUtils.isEmpty(longClickMethod)) setViewLongClickListener(field,longClickMethod); String itemClickMethod = viewInject.itemClick(); if(!TextUtils.isEmpty(itemClickMethod)) setItemClickListener(field,itemClickMethod); String itemLongClickMethod = viewInject.itemLongClick(); if(!TextUtils.isEmpty(itemLongClickMethod)) setItemLongClickListener(field,itemLongClickMethod); Select select = viewInject.select(); if(!TextUtils.isEmpty(select.selected())) setViewSelectListener(field,select.selected(),select.noSelected()); } } } } private void setViewClickListener(Field field,String clickMethod){ try { Object obj = field.get(this); if(obj instanceof View){ ((View)obj).setOnClickListener(new EventListener(this).click(clickMethod)); } } catch (Exception e) { e.printStackTrace(); } } private void setViewLongClickListener(Field field,String clickMethod){ try { Object obj = field.get(this); if(obj instanceof View){ ((View)obj).setOnLongClickListener(new EventListener(this).longClick(clickMethod)); } } catch (Exception e) { e.printStackTrace(); } } private void setItemClickListener(Field field,String itemClickMethod){ try { Object obj = field.get(this); if(obj instanceof AbsListView){ ((AbsListView)obj).setOnItemClickListener(new EventListener(this).itemClick(itemClickMethod)); } } catch (Exception e) { e.printStackTrace(); } } private void setItemLongClickListener(Field field,String itemClickMethod){ try { Object obj = field.get(this); if(obj instanceof AbsListView){ ((AbsListView)obj).setOnItemLongClickListener(new EventListener(this).itemLongClick(itemClickMethod)); } } catch (Exception e) { e.printStackTrace(); } } private void setViewSelectListener(Field field,String select,String noSelect){ try { Object obj = field.get(this); if(obj instanceof View){ ((AbsListView)obj).setOnItemSelectedListener(new EventListener(this).select(select).noSelect(noSelect)); } } catch (Exception e) { e.printStackTrace(); } } }