/** * 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 com.rincliu.library.common.persistence.afinal; import java.lang.reflect.Field; 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; import com.rincliu.library.common.persistence.afinal.annotation.view.EventListener; import com.rincliu.library.common.persistence.afinal.annotation.view.Select; import com.rincliu.library.common.persistence.afinal.annotation.view.ViewInject; public class RLFinalActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); initView(); } @Override public void setContentView(View view, LayoutParams params) { super.setContentView(view, params); initView(); } @Override 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(); } } }