Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android通過注解初始化View

Android通過注解初始化View

編輯:關於Android編程

一、引言

Android中通過findViewById在布局文件中找到需要的View,加入一個Activity裡面有許多的View需要初始化,那將是一件很繁瑣的事情。當然Google一下你會發現有很多Android Annotations框架。比如比較有名的“Android Annotations”,這樣的框架很復雜,用起來也比較麻煩,還有一些BUG,第一次使用也花費了不少時間研究。也許你在項目中只希望用到 Inject View這個功能,又或者你想知道這個實現的原理是怎樣的。本文主要是解決這兩個問題,實現一個最簡單的ViewInject.


二、原理

原理是在Activity加載好後通過找到Activity中使用注解的字段,再通過Java反射的方式,動態的給這個字段設置值。

1、首先你需要了解一下Java的注解是如何工作的,如果你不了解可以先看一下相關的資料,這個比較簡答。首先定義我們的注解類:

/**
 * view inect by id
 * 
 * @author Lucky
 * 
 */
@Target(ElementType.FIELD)//表示用在字段上
@Retention(RetentionPolicy.RUNTIME)//表示在生命周期是運行時
public @interface ViewInject {
	int value() default 0;
}

2、我們需要定義個BaseActivity,在這個類中來解析注解

/**
 * 
 * @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();
		}
	}
}



3、完成上面的步驟後就是如何去使用了,示例代碼如下:

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved