JackKnife开发专题-方便快捷的IOC框架

最近在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' }

二、关于如何使用(参考官网http://www.jackwhliu.cn/jackknife/)

(一)基于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出来的View
TextView 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();

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值