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);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值