Android Afinal框架学习(二) FinalActivity 一个IOC框架
框架地址:https://github.com/yangfuhai/afinal
相应的源代码:
net.tsz.afinal.annotation.view.*
FinalActivity
FinalActivity是一个基础类,结合注解实现了,依赖注入(view的资源id,经常使用的监听器), 利用set方式注入
全然注解方式就能够进行UI绑定和事件绑定,无需findViewById和set event Listener
这个过程:initInjectedView>findViewById、setListener(activity, activity.field, eventLocalMethod, eventType)>
1.依据id得到view对象,设置到activity相应的field中
2. switch(eventType) {
case event:
view.set event listener(new EventListener(activity, eventLocalMethod));
EventListener implements many event listener>
在相应的event的重写方法中,反射调用eventLocalMethod
这些eventLocalMethod 的參数须要与 相应的系统 event method 的參数一致
...
}
注解有哪些类型:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewInject {
public int id();
public String click() default "";
public String longClick() default "";
public String itemClick() default "";
public String itemLongClick() default "";
public Select select() default @Select(selected="") ;
}
调用注解:
package com.stone.afinal; import net.tsz.afinal.FinalActivity;
import net.tsz.afinal.annotation.view.Select;
import net.tsz.afinal.annotation.view.ViewInject;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView; public class MainActivity extends FinalActivity {
@ViewInject(
id = R.id.imageview,
click = "myClick",
longClick = "myLongClick")
ImageView imageview; @ViewInject(
id = R.id.listview,
click = "myClick",
itemLongClick = "myItemLongClick",
itemClick = "myItemClick",
longClick = "myLongClick",
select = @Select(selected="myItemSelected", noSelected="myNoSelected"))
ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//继承FinalActivity,setContentView中初始化了
} public void myClick(View v) {
System.out.println("--myClick--");
}
public void myLongClick(View v) {
System.out.println("--myLongClick--");
}
public void myItemLongClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
System.out.println("--myItemLongClick--");
}
public void myItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
System.out.println("--myItemClick--");
}
public void myItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
System.out.println("--myItemSelected--");
} public void myNoSelected(AdapterView<?> arg0) {
System.out.println("--myNoSelected--");
}
}
在其它侵入式框架下使用(如ActionBarShelock)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
FinalActivity.initInjectedView(this);
}
在Fragment中使用
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View viewRoot = inflater.inflate(R.layout.map_frame, container, false);
FinalActivity.initInjectedView(this,viewRoot);
}
Android Afinal框架学习(二) FinalActivity 一个IOC框架的更多相关文章
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- spring框架学习(二)——注解方式IOC/DI
什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- 2015年3月26日 - Javascript MVC 框架DerbyJS DerbyJS 是一个 MVC 框架,帮助编写实时,交互的应用。
2015年3月26日 - Javascript MVC 框架DerbyJS DerbyJS 是一个 MVC 框架,帮助编写实时,交互的应用.
- 框架学习之Spring(一IOC)----HelloWrod
一.概述 Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP).简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架. EE 开发分 ...
- Android之条形码、二维码扫描框架(非原创)
文章大纲 一.条形码.二维码扫描框架介绍二.条形码.二维码的区别和组成结构介绍三.条形码.二维码扫描框架应用场景四.BGAQRCode-Android框架实战五.项目源码下载六.参考文章 一.条形码. ...
- Spring 框架学习—控制反转(IOC)
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...
- Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...
PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框... AndBase中AbActivity封 ...
- spring学习(二) ———— AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
随机推荐
- Linux05--Shell程序设计01
1.Shell脚本介绍 基本介绍: shell脚本是一个可执行的纯文本文件,由多个shell命令组成. 命令的执行是从上而下,从左而右的分析和执行 命令,参数间的多个空白也会被忽略 #是注释 #!用于 ...
- Oracle EBS-SQL (PO-8):检查有供货比例无采购员.sql
select distinct msr.sourcing_rule_name 名称 , msi.description 说明 , ...
- Ubuntu10.4 install jdk1.6
You know,If you want to develop java applications ,you’d better install jdk. Now I will introduce yo ...
- .Net中String和StringBuilder的区别
String对象是不可变的而StringBuilder则不是这样,可以方便的Append进行扩展. 比如:string aa="123456",那么aa就会在内存中占用一块能放下这 ...
- 【Lucene】挖掘相关搜索词
搜索引擎中往往有一个可选的搜索词的列表,当搜索结果太少时,可以帮助用户扩展搜索内容,或者搜索结果太多的时候可以帮助用户深入定向搜索.一种方法是从搜索日志中挖掘字面相似的词作为相关搜索词列表.另一种方法 ...
- How Many Maos Does the Guanxi Worth
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- Android学习之SQLite学习
花了2天时间,系统学习了下Android开发过程中使用的轻量级数据库SQLite的使用. 并掌握其增,删,该,查的基本数据库操作. 首先要使用SQLite数据库,须要通过Android系统提供的SQL ...
- html系列教程--nav noscript option optgroup object
<nav> 标签:html5用来定义导航部分的标签,与div无异,html5推荐用nav. <noframes> 标签:定义当浏览器不支持frameset时显示的提示性语言 d ...
- T-SQL查询:三值逻辑
1. 三值逻辑:TRUE / FALSE / UNKNOWN 2. 一个缺失的值(NULL)和另一个值进行比较,逻辑结果是UNKNOWN UNKOWN:NULL > 42 / NULL = NU ...
- ios 中的构造方法(二)
在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下: 对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化 那么在继承自 NSObject 的类当中,我 ...