文档章节

为Android引入依赖注入

r
 renhaixyz
发布于 2014/04/29 15:39
字数 371
阅读 447
收藏 0
点赞 0
评论 0

在github上看到了 roboguice这个项目,发现里面的思路很不错,使用依赖注入的方法,可以省略满屏幕的控件以及其他变量的初始化操作,尤其findViewById ...

当然该项目中不仅仅就这么点功能,我只是把依赖注入给抽出来单独使用,这样可以不需要再引入该项目的jar包,毕竟也几百K的大小

主要使用示例:

InjectActivity.java 

public class InjectActivity extends BaseActivity {
	@InjectView(R.id.myTextView)
	TextView textView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.robo_layout);
		textView.setText("inject view");
	}
}

依赖的代码如下 

InJectView.java

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InjectView {
	public abstract int value() default (int) -1;

	public abstract java.lang.String tag() default "";
}

BaseActivity.java

public class BaseActivity extends Activity {
	@Override
	public void setContentView(View view, LayoutParams params) {
		super.setContentView(view, params);
		injectField();
	}

	@Override
	public void setContentView(View view) {
		super.setContentView(view);
		injectField();
	}

	@Override
	public void setContentView(int layoutResID) {
		super.setContentView(layoutResID);
		injectField();
	}

	private void injectField() {
		Field[] fields = this.getClass().getDeclaredFields();
		for (Field field : fields) {
			field.setAccessible(true);
			Annotation[] annotations = field.getAnnotations();
			if (annotations != null) {
				for (Annotation annotation : annotations) {
					if (annotation instanceof InjectView) {
						InjectView injectView = (InjectView) annotation;
						int value = injectView.value();
						if (value != -1) {
							try {
								field.set(this, findViewById(value));
							} catch (IllegalArgumentException e) {
								e.printStackTrace();
							} catch (IllegalAccessException e) {
								e.printStackTrace();
							}
						}
						break;
					}
				}
			}
		}
	}
}

当然,本文只是提供一种思路,尽量节省代码,让注意力集中到业务逻辑上,而非这种重复代码. 如果需要更加完善的功能,比如通过依赖注入的方法来初始化其他几种属性

  1. Preference

  2. Extra (例如getIntent().getStringExtra ....)

  3. Provider

  4. Resource

读者可以自己尝试动手将其丰富一下

© 著作权归作者所有

共有 人打赏支持
r
粉丝 1
博文 2
码字总数 474
作品 0
海淀
程序员
组件化知识梳理(1) - Arouter 的基本使用

组件化知识梳理目录 组件化知识梳理(1) - Arouter 的基本使用 组件化知识梳理(2) - Arouter 源码分析之 Complier SDK 组件化知识梳理(3) - Arouter 源码分析之运行时 SDK 一、前言 放假几天在...

泽毛 ⋅ 04/11 ⋅ 0

ARetrofit组建化最佳路由

Android组件化超级路由,为简单而生。 Github 源码: ARetrofit 原文 demo demo apk 下载 一 介绍 从命名来看,做Android开发的小伙伴们感觉是不是似曾相识…是的,Retrofit,一款优秀的网络框...

CharlesZhu ⋅ 06/05 ⋅ 0

使用Kotlin构建MVVM应用程序—第四部分:依赖注入Dagger2

目录 使用Kotlin构建MVVM应用程序—总览篇 使用Kotlin构建MVVM应用程序—第一部分:入门篇 使用Kotlin构建MVVM应用程序—第二部分:Retrofit及RxJava 使用Kotlin构建MVVM应用程序—第三部分:...

ditclear ⋅ 05/13 ⋅ 0

Java后台开发入门要注意什么

个人做安卓开发差不多两年时间,最近开始转到服务端,说一下转岗之类的新手,需要掌握什么服务端的技术储备。 1 Spring 服务端主流的对象管理容器,主要理解ioc依赖注入后aop面向切面编程。由...

liaowenhao ⋅ 06/05 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 前天 ⋅ 0

从eclipse到Android studio/迁移eclipse的Android项目到Android studio平台的注意事项

整体要注意的地方 先说明一下整体需要注意的地方 1在Android studio建立项目的时候,要注意包名和原来的完全一致,不然会有很多需要改动. 2依赖的jar一定一定要找齐,不然新建项目引用不到,要么...

amiba.org ⋅ 2015/09/07 ⋅ 0

Janus签名漏洞(CVE-2017-13156)原理与利用分析

  *本文原创作者:Tasfa,本文属FreeBuf原创奖励计划,未经许可禁止转载   0×00 简介   前言:去年比较严重的洞,以比较浅显的方式学习记录一下,网上有很多其他深度分析文章,也可借...

FreeBuf ⋅ 05/17 ⋅ 0

android studio代码中无法感知到本地maven仓库中的jar包

本人写了一个依赖注入的jar包,想导入到android studio中使用,gradle中写法如下。但是在代码中引用无法感知。 在idea中是可以用的

算法之名 ⋅ 06/11 ⋅ 0

React Native Mac 下打包Android APK

打包的时候遇到了 好多坑 这里记录下~ 主要步骤: 1.android keystore签名的生成 gradle mac下环境变量的配置 3.android studio中的gradle配置。 4.打包 签名的生成 执行完之后,输入本机的 ...

JsLin_ ⋅ 06/18 ⋅ 0

组件化知识梳理(3) - Arouter 源码分析之运行时 SDK

组件化知识梳理目录 组件化知识梳理(1) - Arouter 的基本使用 组件化知识梳理(2) - Arouter 源码分析之 Complier SDK 组件化知识梳理(3) - Arouter 源码分析之运行时 SDK 一、Api SDK 分析 ...

泽毛 ⋅ 04/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 29分钟前 ⋅ 0

Cube的构建过程

Cube 的构建方式有两种:全量构建和增量构建。两者的构建过程完全一样,区别在于构建时读取的数据源是全集还是子集。 Cube的构建步骤: 1.创建临时的 Hive 平表(从 Hive 读取数据)。 2.计算...

无精疯 ⋅ 33分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 36分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 51分钟前 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

Hive函数

1.函数explode (一转多) create table hive_wc(sentence string); load data local inpath '/home/hadoop/data/hive-wc.txt' into table hive_wc; 结果: hive > select * from hive_wc; ......

GordonNemo ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部