Skip to content
ShiHao edited this page Sep 11, 2017 · 7 revisions

Welcome to the XDroid-Databinding wiki!

XDroid-Databinding是XDroid Android快速开发框架的Databinding版本,其使用方式类似于XDroid,大部分源码也来自XDroid。由UI、Cache、Event、ImageLoader、Kit、Log、Router、Net等几个部分组成。

如果你对Databinding还不是了解,建议先学习一下相关的知识。

特性

XDroid-Databinding主要有这些特性:

  • 基于MVC,可快速切换到MVP
  • 提供XActivityXFragmentXLazyFragment等基类,可快速进行开发
  • 内置了EventBus,可自由切换到其他事件订阅库
  • 网络请求为OkHttp+Retrofit2+RxJava2
  • 使用Rxlifecycle管理订阅,防止rx出现内存泄漏
  • 引入三方库极少
  • 使用Google官方Databinding
  • 基于XDroid-Base,包含常用的快速开发工具类。
  • 提供SimpleRecAdapterSimpleListAdapteXRecyclerAdapterXListAdapter等基类
  • 实现了Memory、Disk、SharedPreferences三种方式的缓存,可自由扩展
  • 内置Glide,可自由切换其他图片加载库
  • 可输出漂亮的Log,支持Json、Xml、Throwable等,蝇量级实现
  • 内置链式路由
  • 内置Toast工具类
  • 内置常用工具类:packagerandomfile...,提供的都是非常常用的方法
  • 内置加密工具类 XCodec,你想要的加密姿势都有

Get Started

首先在您的app module 中 添加如下依赖:

android {
    dataBinding {
        enabled true
    }
}

通过JitPack引入

step1 在根目录的gradle文件中配置:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

step2 添加依赖:

dependencies {
	        compile 'com.github.fodroid:XDroid-Databinding:v1.3'
}

Base篇

XActivity

项目的Activity可直接继承XActivity,也可重新写一个基类Activity并让其继承XActivity,子类Activity必须实现这四个方法:

    void initData(Bundle savedInstanceState);       //初始化数据

    void setListener();                 //设置事件监听

    int getLayoutId();                  //设置布局资源文件id

    boolean useEventBus();              //是否使用eventbus

这些类的定义在UiCallback接口中,若要进行修改,可直接修改此类。 XActivity中还实现了UiDelegate,实现常用的公共方法,在子类中可直接使用。其中还实现了databinding方法,通过getBinding得到ViewDataBinding

   getBinding().viewPager.setAdapter(adapter);
   getBinding().viewPager.setOffscreenPageLimit(3);
   getBinding().tabLayout.setupWithViewPager(getBinding().viewPager);

XFragment

XFragment的实现与XActivity一致,为了方便的对FragmentActivity进行切换,也就是只需要修改继承父类,就可改变Fragment&Activity的归属。其使用方法与XActivity是一致的。

XLazyFragment

XLazyFragment实现了懒加载,其使用方式与XFragment一致。

UiDelegate

UiDelegate是一个接口,封装了一些常见的公共方法,供XActivityXFragmentXLazyFragment的子类使用,其定义如下:

public interface UiDelegate {

    void resume();
    void pause();
    void destory();

    void visible(boolean flag, View view);
    void gone(boolean flag, View view);
    void inVisible(View view);

    void toastShort(String msg);
    void toastLong(String msg);

}

XDroid中内置了UiDelegateBase实现类。当然你也可以根据需求在此基础上定义自己的接口进行扩展。

SimpleRecBindingViewHolder

public class GanhuoAdapter extends SimpleRecAdapter<GankResults.Item,
        SimpleRecBindingViewHolder<AdapterGanhuoBinding>> {

    public static final int TAG_VIEW = 0;

    public GanhuoAdapter(Context context) {
        super(context);
    }

    @Override
    public SimpleRecBindingViewHolder newViewHolder(View itemView) {
        return new SimpleRecBindingViewHolder(itemView);
    }

    @Override
    public int getLayoutId() {
        return R.layout.adapter_ganhuo;
    }

    @Override
    public void onBindViewHolder(final SimpleRecBindingViewHolder<AdapterGanhuoBinding> holder, final int position) {
        final GankResults.Item item = data.get(position);
        holder.getBinding().setItem(item);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (getSimpleItemClick() != null) {
                    getSimpleItemClick().onItemClick(position, item, TAG_VIEW, holder);
                }
            }
        });
    }

}

Event篇

事件订阅,对应包event

使用事件订阅,需要重写XActivityXFragment或者XLazyFragmentuseEventBus方法,当返回true时,表示使用事件订阅。

@Override
public boolean useEventBus() {
    return false;
}

EventBus的使用

XDroid中内置实现了EventBus,使用时只需要调用

BusFactory.getBus().register(this);

XActivity&XFragment&XLazyFragment已经有默认实现,无需额外调用。

EventBus使用最新的3.0,去了解详情EventBus 需要说明的是: 事件类需要实现IEvent接口

事件发送:

BusFactory.getBus().register(new MsgEvent());

Net篇

在此之前你需要先了解一下下面四个库:

Retrofit:https://github.com/square/retrofit

Okhttp:https://github.com/square/okhttp

RxJava:https://github.com/ReactiveX/RxJava

RxLifecycle:https://github.com/trello/RxLifecycle

如何使用

XDroid-Base篇

其他使用请参照XDroid-Base,详细说明请前往wiki