框架地址: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框架的更多相关文章

  1. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  2. spring框架学习(二)——注解方式IOC/DI

    什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...

  3. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  4. 2015年3月26日 - Javascript MVC 框架DerbyJS DerbyJS 是一个 MVC 框架,帮助编写实时,交互的应用。

    2015年3月26日 -  Javascript MVC 框架DerbyJS DerbyJS 是一个 MVC 框架,帮助编写实时,交互的应用.

  5. 框架学习之Spring(一IOC)----HelloWrod

    一.概述 Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP).简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架. EE 开发分 ...

  6. Android之条形码、二维码扫描框架(非原创)

    文章大纲 一.条形码.二维码扫描框架介绍二.条形码.二维码的区别和组成结构介绍三.条形码.二维码扫描框架应用场景四.BGAQRCode-Android框架实战五.项目源码下载六.参考文章 一.条形码. ...

  7. Spring 框架学习—控制反转(IOC)

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...

  8. Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...

    PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框...   AndBase中AbActivity封 ...

  9. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

随机推荐

  1. Python urllib和urllib2模块学习(二)

    一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...

  2. 为啥都不用Qt Quick Controls 2呢

     为啥都不用Qt Quick Controls 2呢  https://github.com/qt/qtquickcontrols2/ 

  3. C++箴言:理解 new-handler的行为

    当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常).很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做.你依然能达到 ...

  4. 习题3.15 自调整表Find例程

    #include<stdio.h> #include<stdlib.h> typedef int * List; /* 自调整表的Find数组实现 */ int Find(Li ...

  5. string 转换char类型

    将string转换成char类型 const char *c = string.c_str() char转换string char *c_name = "char" string ...

  6. Expect:100-Continue & HTTP 417 Expectation[转]

    Expect:100-Continue & HTTP 417 Expectation 背景:今天调试火车票查询的代码,发现一个奇怪的事情,如果使用公司本地的代理,那么一切正常,如果使用的是公司 ...

  7. [ACM] hdu 1003 Max Sum(最大子段和模型)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  8. nginx fastcgi buffers影响页面输出数据大小记录

    一台测试服务器由于没做fastcgi_buffer单独设置,在跑一个显示10w条数据的循环输出时只能显示4700-5200条记录 <?php $str = ''; for($i = 0; $i ...

  9. url的4种访问方式

    1.PATHINFO 模式 -- 重点!!!!!! http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2 (可以修改 'URL_PATHINFO_DEPR'=>'-',/ ...

  10. AJAX应用中必须要掌握的知识!

    AJAX是什么? 是Asynchronous Javascript And XML的首字母的缩写, 它不是一门的新的语言,而是对现有技术的综合利用. 其本质是在HTTP协议的基础上以异步的方式与服务器 ...