編輯:關於Android編程
Android中通過findViewById在布局文件中找到需要的View,加入一個Activity裡面有許多的View需要初始化,那將是一件很繁瑣的事情。當然Google一下你會發現有很多Android Annotations框架。比如比較有名的“Android Annotations”,這樣的框架很復雜,用起來也比較麻煩,還有一些BUG,第一次使用也花費了不少時間研究。也許你在項目中只希望用到 Inject View這個功能,又或者你想知道這個實現的原理是怎樣的。本文主要是解決這兩個問題,實現一個最簡單的ViewInject.
原理是在Activity加載好後通過找到Activity中使用注解的字段,再通過Java反射的方式,動態的給這個字段設置值。
/** * view inect by id * * @author Lucky * */ @Target(ElementType.FIELD)//表示用在字段上 @Retention(RetentionPolicy.RUNTIME)//表示在生命周期是運行時 public @interface ViewInject { int value() default 0; }
/** * * @author Lucky * */ public abstract class BaseActivity extends FragmentActivity { /** * get content view layout id * * @return */ public abstract int getLayoutId(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId()); autoInjectAllField(); } /** * 解析注解 */ public void autoInjectAllField() { try { Class> clazz = this.getClass(); Field[] fields = clazz.getDeclaredFields();//獲得Activity中聲明的字段 for (Field field : fields) { // 查看這個字段是否有我們自定義的注解類標志的 if (field.isAnnotationPresent(ViewInject.class)) { ViewInject inject = field.getAnnotation(ViewInject.class); int id = inject.value(); if (id > 0) { field.setAccessible(true); field.set(this, this.findViewById(id));//給我們要找的字段設置值 } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } } }
public class TestActivity extends BaseActivity { @ViewInject(R.id.claim_statement) private WebView mWebView; @Override public int getLayoutId() { // TODO Auto-generated method stub return R.layout.activity_claim; } }
1、/kf/201405/302998.html
XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。今天就由我向大家介紹一下在Andr
1、概述TabLayout是在2015年的google大會上,google發布了新的Android Support Design庫的新組件之一,以此來全面支持Materi
做過android動畫的人對Interpolator應該不會陌生,這個類主要是用來控制android動畫的執行速率,一般情況下,如果我們不設置,動畫都不是勻速執行的,系統
在android開發中,經常用到去解析xml文件,常見的解析xml的方式有一下三種:SAX、Pull、Dom解析方式。最近做了一個android版的CSDN閱讀器,用到了