`

ioc基础(视图,资源,assert注入)-dhroid文档

阅读更多

上一节 Android 极速开发框架 dhroid来了

1 ioc即控制反转。

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 

控制反转还有一个名字叫做依赖注入(Dependency Injection)

    dhroid的ioc不仅实现了视图和资源的注入,同时对于对象,接口的注入做了很大的努力

 

ioc中最简单最好实现的就是视图资源注入,dhroid的ioc核心其实是对象(接口的)注入

下面还是从简单的视图注入开始到复杂的接口对象注入

 

1.1注入视图

 

public class IocTestActivity extends BaseActivity{
       @InjectView(id=R.id.text)
       TextView textV;
 
       @Override
       protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.ioc_test_activity);
               if(textV==null){
                    Log.e("dhroid", "textV不为空,我是不会打印的");
                }
      }
}

 

 

上边就是一个视图注入的例子

textV在contentView(layout)之后就已经被赋值了

 

1.1注入视图

   注入视图的注解是 @InjectView

   

    @InjectView,参数id  

        进行视图查找,相当于findViewById(R.id.xxx)

     

   @InjectView 的参数属性layout 

        可以注入一个layout布局,

       

 相当于LayoutInflater.from(this).inflate(R.layout.xxx, null);

 

 

        如    

  @InjectView(layout=R.layout.ioc_head)
   ViewGroup headV;

      @InjectView 的参数属性inView

      表明该view只某个view的子view

      如      

        //注入布局文件
	@InjectView(layout=R.layout.ioc_head)
	ViewGroup headV;
	//在其他视图中查看
	@InjectView(id=R.id.intext,inView="headV")
	TextView childTextV;

     表明childTextV是headV的子view

   

 相当于 
headV=(ViewGroup )LayoutInflater.from(this).inflate(R.layout.ioc_head, null);
childTextV=headV.findViewById(R.id.intext);

 

   1.1.1 为视图添加事件

     

   下面的代码添加了点击事件

 

	@InjectView(id=R.id.assertFile,click="toInstal")
	View instalApkV;

        public void toInstal(View v) {
		Log.v("dhroid", "instalApk点击后我会被执行");
        }

   

 

   事件还有itemclick 和itemLongclick 

 

	@InjectView(id=R.id.listView,itemClick="toEditStudent",itemLongClick="toDeleteStudent")
	ListView listView;
        
	public void toEditStudent(AdapterView<?> parent, View view, int position, long id) {
		Log.v("dhroid", "itemClick事件");
	}

	public void toDeleteStudent(AdapterView<?> parent, View view, final int position, long id) {
		Log.v("dhroid", "itemLongClick事件");
	}

  

 

 

1.2注入资源

     使用注解@InjectResource

    资源可以注入drawable,string,color,dimen

 

    下面代码相当于getResources().getString(R.string.app_name)

 

	//注入字串
	@InjectResource(string=R.string.app_name)
	String appname;

 

 

    下面代码相当于getResources().getDrawable(R.drawable.ic_launcher)

 

 

 

 

        @InjectResource(drawable=R.drawable.ic_launcher)
	Drawable icDraw;

   

    color,和dimen同理

    

	//这里不能为int因为int有默认值0 有值的属性会被忽略,防止重复注入
	@InjectResource(color=R.color.link)
	Integer colorLink;
	//注入图片
	@InjectResource(drawable=R.drawable.ic_launcher)
	Drawable icDraw;

 1.3 注入extra

   页面间数据传递也可以注入的

   下面代码相当于getIntent().getStringExtra("str");

	//接受传入的字符串
	@InjectExtra(name="str",def="默认值")
	String extra;

   Integer,Long,Float,Double,Boolean(特殊的JSONObject,JSONArray,其他bean对象都能传)

   这里需要特殊说明一下不能使用int,long,float,double因为他们有默认值,注入时发现有值会滤过的

   如果有默认值请写到def属性下,

   特殊的JSONObject,JSONArray和bean对象是特殊强制转换的结果,传入的对象都还string类型

传入时
        it.putExtra("jo", "{name:'我是json字符串'}");
        it.putExtra("array", "[{name:'我是json数组'}]");
        it.putExtra("bean", "{name:'我是json字符串'}");
接受时
	@InjectExtra(name="jo")
	JSONObject extrajo;
	@InjectExtra(name="array")
	JSONArray   extraarray;

	@InjectExtra(name="bean")
	User   extrauser;

 

 

1.4 注入assert

    @InjectAssert主要是用来注入assert中的文件的

    下面代码可以注入assert文件夹下面的testtext.json的文本内容

 

	@InjectAssert(path="testtext.json")
	String testassert;

   如果你的文本内容本来就是json可以写为

 

 

	@InjectAssert(path="testtext.json")
	JSONObject jo;

   我们还能注入文件如

 

 

       @InjectAssert(path="anzhi.apk")
	File apkFile;

 因为assert本身不支持文件读写的所以其实先将文件拷贝出去后然后赋值的,文件拷贝时是异步的使用时需要注意文件是否拷贝完成,

 

 可以在需要使用前面的页面就进行一次注入(文件只会拷贝一次)

 

下一节 ioc高级(接口,对象注入)-dhroid文档

 

 开源中国地址:http://www.oschina.net/p/dhroid

qq交流群:297593013(欢迎加入)
分享到:
评论

相关推荐

    Spring5 框架 ---- IOC容器 ---- 代码

    Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...

    华为智慧城市之智能运行中心(ioc)[2021-04-22](48页).pdf

    华为智慧城市之智能运行中心(ioc)[2021-04-22](48页).pdf

    Spring IoC简单示例-XML配置-Maven构建

    Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在Spring中就是...

    Spring IoC简单示例-注解配置-Maven构建

    在本例中,可能有一个名为`spring-ioc-anno`的包,其中包含着使用注解配置的Spring bean。 为了启动Spring容器并运行应用程序,我们可以创建一个主类,使用`ApplicationContext`来加载配置并获取bean。例如: ```...

    Spring Ioc(依赖注入)入门例子--属性注入

    Spring的核心特性之一就是它的Inversion of Control(IoC,控制反转)容器,也被称为Dependency Injection(DI,依赖注入)。这个概念是Spring框架使应用程序组件之间解耦的关键。让我们深入探讨一下Spring的IoC和...

    【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 视图依赖注入代码示例 ).zip

    【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 ) https://hanshuliang.blog.csdn.net/article/details/120404805 博客源码快照

    IOC835芯片 MM-PIO835-1P驱动程序 解压密码:hebeiww

    PCI并口卡 PCI转打印并口DB25接口扩展卡 IOC835芯片驱动 功能描述: 在具备PCI插槽的电脑上扩展出1个DB25并口 规格说明: 符合PCIRev2.1协议 传输率最大可达1.5 Mbytes/sec 1个DB25并口接头 符合标准的带16byte接收...

    Spring Ioc源码分析系列--自动注入循环依赖的处理.doc

    Spring Ioc 源码分析系列--自动注入循环依赖的处理 本篇文章主要讲解了 Spring Ioc 源码分析系列中自动注入循环依赖的处理机制。循环依赖是 Spring 框架中一个经典的问题,也是面试中常被问到的问题。本篇文章将...

    springIOC核心组件分析.vsdx

    spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...

    IoC 依赖注入 技术总结

    "IoC 依赖注入 技术总结" IoC 依赖注入技术是软件设计中的一种重要技术,旨在解决软件系统中的耦合问题。该技术的核心思想是将被调用构件实例化,并注入到调用构件之中,以实现软件系统的高内聚、低耦合。IoC 依赖...

    雷赛IOC0640.rar

    标题中的“雷赛IOC0640.rar”指的是雷赛智能公司的一款名为IOC0640的工业控制产品,该产品通常用于自动化控制系统中,提供高效、稳定的输入/输出(I/O)管理。这个压缩包可能包含了关于该产品的详细资料和技术文档。...

    公费医疗报销系统啊啊啊

    文档地址:...-Spring Controller##### 基于MVC模式- 视图--Jsp- 模型--JavaBean- 业务层--JavaBean##### 主要技术- Spring Ioc- Mybatis+Spring整合- 声明式事务- Spring标签库- Spring拦截器

    Spring.Net演示实例(IOC、AOP、属性注入、构造函数注入、通知过滤器)

    今天有空,写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了...

    Spring的IoC实现案例

    IoC,也称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理责任从使用它们的代码中分离出来。在Spring框架中,IoC容器负责创建对象、管理它们之间的依赖关系,并在需要时注入这些依赖...

    Spring Ioc 注解 依赖注入

    ### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...

    Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm

    Ioc模式解析 - JAVA - 技术天地 - 赛迪网.htm

    .net 自定义 IOC注入(含属性注入、构造函数注入、方法注入等)

    .net 自定义 IOC注入(含属性注入、构造函数注入、方法注入等)

    Spring-ioc-jar

    这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...

    spring 2.5 IOC 自动扫描,自动注入

    而自动扫描和自动注入是Spring 2.5中实现IOC的两个核心特性,极大地简化了配置工作,提高了开发效率。以下是对这两个特性的详细解释: **自动扫描**: 自动扫描是Spring框架的一个强大功能,它允许开发者指定一个或...

    使用Java的xml API、Java反射技术演示Spring的DI或者IoC原理

    3. 如果一切正常,你会看到使用Java集合、XML API,以及反射技术模拟Spring的get注入和自定义的IoC容器实现的例子--get注入了Hello类和一个MyFrame类,并且实例化之后可以运行! 4. 看一下testDemoSpringDI()方法,...

Global site tag (gtag.js) - Google Analytics