JackKnife开发专题-方便快捷的IOC框架
来源:互联网 发布:lol欧服账号淘宝 编辑:程序博客网 时间:2024/06/05 14:37
最近在github上看到一个很好Android端IOC框架,觉得十分小巧方便,用起来的非常简单,因此推荐给大家,主人十分勤奋,一有时间就更新框架,励志让安卓开发以后变得超级简单,用代码改变世界。希望大家能支持,多多给星
github传送门:https://github.com/JackWHLiu/jackknife
一、关于如何配置环境
如果要依赖jackknife的库,需要对号入座的加上以下两个配置。
//指定仓库的地址,在project的build.gradle加入加粗的代码。
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
//依赖本库,在app模块的build.gradle加入加粗的代码。
dependencies { compile 'com.github.JackWHLiu:jackknife:1.0.0' }
二、关于如何使用(参考https://github.com/JackWHLiu/JackKnifeDemo)
(一)基于IOC的自动注入视图、绑定控件和注册事件(jackknife-ioc)
1、自动注入视图
(1)Activity继承com.lwh.jackknife.app.Activity,Fragment继承com.lwh.jackknife.app.Fragment
(2)保证布局的xml文件和Activity和Fragment的Java类的命名遵循一定的对应关系(Java类名必须以Activity或Fragment结尾)。
具体关系如下: 前缀+名字 例如:MainActivity.java映射的xml文件名就为activity_main.xml,TTSFragment.java映射的xml文件名就为fragment_t_t_s.xml。 Java文件以大写字母分隔单词,xml以下划线分隔单词。
2、自动绑定控件
(1)不加注解
直接在Activity或Fragment声明控件(View及其子类)为成员变量,不加任何注解。它会以这个View的名字来绑定该控件在xml中的id的value,即@+id/后指定的内容。
(2)加@ViewId
优先级比不加注解高,简单的说,加上这个注解就不会使用默认的使用成员属性名来对应xml的控件id的方式,而是使用该注解指定的id与xml的控件id绑定。
例如:
@ViewId(R.id.alertDialog_et)EditText alertDialog_et;
(3)加@ViewIgnore
优先级最高,加上该注解,jackknife会直接跳过该控件的自动注入。一般使用在使用Java代码new出来的控件提取到全局的情况。
@ViewIgnore//此注解用在使用代码new出来的ViewTextView mTipsTextView;
(4)加onClick点击事件
@OnClick(R.id.button_ioc_plus)public void plus(View view) { mCountTextView.setText(++mCurrent+""); mTipsTextView = new TextView(this); mTipsTextView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); mTipsTextView.setText("继续点击,直到点不到我为止"); linearlayout_ioc_root.addView(mTipsTextView, 1);}多个onClick点击事件,只需分号隔开就好
@OnClick({ R.id.relativelayout_logger, R.id.relativelayout_toastutils, R.id.relativelayout_basemodel, R.id.relativelayout_ioc, R.id.relativelayout_commonadapter, R.id.relativelayout_mvp, R.id.relativelayout_orm, R.id.relativelayout_shadeview, R.id.relativelayout_horizontaltabbar, R.id.relativelayout_multiradiogroup, R.id.relativelayout_letterview})
public void onMenuItemClick(View view) { Intent intent = new Intent(); switch (view.getId()) { case R.id.relativelayout_logger: intent.setClass(this, LoggerActivity.class); break; case R.id.relativelayout_toastutils: intent.setClass(this, ToastActivity.class); break; case R.id.relativelayout_basemodel: intent.setClass(this, BaseModelActivity.class); break; case R.id.relativelayout_ioc: intent.setClass(this, IocActivity.class); break; case R.id.relativelayout_commonadapter: intent.setClass(this, CommonAdapterActivity.class); break; case R.id.relativelayout_mvp: intent.setClass(this, ArticleActivity.class); break; case R.id.relativelayout_orm: intent.setClass(this, OrmActivity.class); break; case R.id.relativelayout_shadeview: intent.setClass(this, ShadeViewActivity.class); break; case R.id.relativelayout_horizontaltabbar: intent.setClass(this, HorizontalTabBarActivity.class); break; case R.id.relativelayout_multiradiogroup: intent.setClass(this, MultiRadioGroupActivity.class); break; case R.id.relativelayout_letterview: intent.setClass(this, LetterViewActivity.class); break; } startActivity(intent);}
5.基于Java动态代理的ioc事件自动注册,自动调用listenerSetter指定的方法
/**
* 基于Java动态代理的ioc事件自动注册,自动调用listenerSetter指定的方法,传入的回调方法是listenerType指定的类
* 型的callbackMethod指定的方法,真正回调的是使用了本注解的方法。需要注意的是,代理方法与被代理方法的参数列表必
* 须保持一致。
*
* @auther lwh
* @see TitleBar#setOnRightClickListener(TitleBar.OnRightClickListener)
* @see TitleBar.OnRightClickListener#onClick(View)
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@EventBase(listenerSetter = "setOnRightClickListener",
listenerType = TitleBar.OnRightClickListener.class,
callbackMethod = "onClick")
public @interface OnRight {
int[] value();
}
* 基于Java动态代理的ioc事件自动注册,自动调用listenerSetter指定的方法,传入的回调方法是listenerType指定的类
* 型的callbackMethod指定的方法,真正回调的是使用了本注解的方法。需要注意的是,代理方法与被代理方法的参数列表必
* 须保持一致。
*
* @auther lwh
* @see TitleBar#setOnRightClickListener(TitleBar.OnRightClickListener)
* @see TitleBar.OnRightClickListener#onClick(View)
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@EventBase(listenerSetter = "setOnRightClickListener",
listenerType = TitleBar.OnRightClickListener.class,
callbackMethod = "onClick")
public @interface OnRight {
int[] value();
}
阅读全文
0 0
- JackKnife开发专题-方便快捷的IOC框架
- 方便快捷的ThinkPHP轻量级框架 在线课第一讲
- 方便快捷的布局法——利用960GS框架
- 使Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- 使Android开发方便快捷的8个好工具
- Spring探秘--开发自己的Spring框架之IOC
- Android 的轻量级orm、ioc快速开发框架(原生)
- 方便快捷的在线取色器
- 方便快捷的HTTP匹配
- Google的IOC框架: GUICE
- spring框架(IOC)的理解
- 制作自己的IOC框架
- 技术分享连载(九十)
- 在项目中遇到的一些关于vue的坑
- Myeclipse安装反编译插件
- 阿里宣布开源容器技术Pouch和P2P文件分发系统“蜻蜓”
- RabbitMQ五种消息队列学习(五)--路由模式
- JackKnife开发专题-方便快捷的IOC框架
- 修改CentOS7的网卡名为eth0
- Redis Cluster迁移目标节点宕机下填坑
- 【数字化】数字化转型成功的企业都发生了什么变化?
- html-webpack-plugin详解
- 网络状态的判断
- Django框架全面讲解 -- Session
- 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速
- 工作中规则感悟