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

是不是很方便简洁,这样会使你的代码逼格提高很多,到这里介绍的差不多了,大家还是自己去下载体验吧,希望大家多关注,多给星,谢谢啦


原创粉丝点击