https://github.com/limedroid/XDroid/wiki
XDroid是一个轻量级的Android快速开发框架,由UI
、Cache
、Event
、ImageLoader
、Kit
、Log
、Router
、Net
等几个部分组成。其设计思想是使用接口对各模块解耦规范化,不强依赖某些明确的三方类库,使得三方类库可自由搭配组装,方便替换。可快速、自由的进行App开发。
XDroid主要有这些特性:
使用,仅需三步:
clone 'XDroid'库到本地:
git clone https://github.com/limedroid/XDroid.git
将library作为依赖库,在您的app module 中 添加如下依赖:
compile project(':library')
修改kit
包下的XDroidConf
配置类,主要针对log、cache、router。若采用默认配置,此步骤可略过.
在UI层,主要对Activity、Fragment、RecyclerView、ListAdapter进行了封装。
项目的Activity可直接继承XActivity
,也可重新写一个基类Activity并让其继承XActivity,子类Activity必须实现这四个方法:
void initData(Bundle savedInstanceState); //初始化数据
void setListener(); //设置事件监听
int getLayoutId(); //设置布局资源文件id
boolean useEventBus(); //是否使用eventbus
这些类的定义在UiCallback
接口中,若要进行修改,可直接修改此类。 XActivity中还实现了UiDelegate
,实现常用的公共方法,在子类中可直接使用。
可以将项目的showLoadingDialog()等常用方法添加进去,方便子类调用
XFragment的实现与XActivity一致,为了方便的对Fragment和Activity进行切换,也就是只需要修改继承父类,就可改变Fragment&Activity的归属。其使用方法与XActivity是一致的。
UiDelegate
是一个接口,封装了一些常见的公共方法,供XActivity
、XFragment
的子类使用,其定义如下:
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
实现类。
XDroid集成了XRecyclerView,XRecyclerView有该库的详细说明。这里列举说明如下:
SimpleRecAdapter
是针对单ItemType场景对RecyclerView.Adapter的封装,只需要继承该类,实现三个方法即可:
F newViewHolder(View itemView); //创建viewholder
int getLayoutId(); //设置布局资源id
void onBindViewHolder(F holder, int position); //绑定数据和事件
若有多个ItemType,请继承RecyclerAdapter类,具体实现推荐看源码
SimpleListAdapter
是针对单ItemType场景对ListAdapter的封装,继承该类,也需要实现三个方法:
H newViewHolder(View convertView); //创建viewholder
int getLayoutId(); //设置布局资源文件
void convert(H holder, T item, int position); //绑定数据和事件
若有多个ItemType,请继承XListAdapter类
XDroid定义了ICache
接口
public interface ICache {
void put(String key, Object value); //存
Object get(String key); //取
void remove(String key); //删除
boolean contains(String key); //检验是否存在
void clear(); //删除所有
}
并实现了DiskCache
、MemoryCache
,其内部分别借助 DiskLruCache
、LruCache
实现。
SharedPref
是对SharedPreferences的封装,包含了一系列的get
&put
方法、remove
等。 推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。如:
public String getUserName(){
return getString(KEY.USER_NAME , null);
}
可以在
XDroidConf
中配置缓存文件名称,默认是config
MemoryCache
内部采用LruCache
实现,是ICache
的实现类。 推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。
DiskCache
内部采用DiskLruCache
实现,是文件缓存方式,其在基本缓存的基础上,增加了有效期,可以用于Api数据缓存。
void put(String key, String value);
void put(String key, String value, long expireMills);
String get(String key);
void remove(String key);
boolean contains(String key);
void clear();
实现了上述方法。
可以在
XDroidConf
中配置缓存目录名称,默认是cache
自定义缓存只需要实现ICache
即可。
事件订阅,对应包event
使用事件订阅,需要重写XActivity
或者XFragment
的useEventBus
方法,当返回true时,表示使用事件订阅。
@Override
public boolean useEventBus() {
return false;
}
XDroid
中内置实现了EventBus
,使用时只需要调用
BusFactory.getBus().register(this);
XActivity
&XFragment
已经有默认实现,无需额外调用。
EventBus
使用最新的3.0,去了解详情EventBus
需要说明的是: 事件类需要实现IEvent
接口
事件发送:
BusFactory.getBus().register(new MsgEvent());
MsgEvent implement IEvent
自定义事件订阅只需要两步:
实现IBus
接口,并实现其四个方法:
@Override
public void register(Object object) {
}
@Override
public void unregister(Object object) {
}
@Override
public void post(IEvent event) {
}
@Override
public void postSticky(IEvent event) {
}
修改BusFactory
类的实现,将EventBusImpl
的实现方案替换成您自己的事件订阅方案。
public static IBus getBus() {
if (bus == null) {
synchronized (ILFactory.class) {
if (bus == null) {
bus = new EventBusImpl();
}
}
}
return bus;
}
图片加载对应包imageloader
XDroid
内置了glide
作为图片加载工具
glide
的使用只需要调用:
ILFactory.getLoader().loadAssets(imageView,"",new ILoader.Options(loadingResId,errorResId));
其他方法可以查看源码.
自定义图片加载只需两步,不需要修改之前的调用代码。
ILoader
介绍 ILoader
是一个接口,定义如下:
public interface ILoader {
void init(Context context); //图片加载框架初始化,通常在App->onCreate方法中调用
void loadNet(ImageView target, String url, Options options); //加载网络资源
void loadResource(ImageView target, int resId, Options options); //加载resource
void loadAssets(ImageView target, String assetName, Options options); //加载asset
void loadFile(ImageView target, File file, Options options); //加载file
void clearMemoryCache(Context context); //clear内存缓存
void clearDiskCache(Context context); //clear磁盘缓存
}
如果项目还有其他需求,可直接在这里进行扩展。
新建一个图片加载控制器,并实现ILoader
接口及其对应的几个方法。
在ILFactory
中修改getLoader
的实现,替换成新的图片加载控制器
public static ILoader getLoader() {
if (loader == null) {
synchronized (ILFactory.class) {
if (loader == null) {
loader = new GlideLoader();
}
}
}
return loader;
}
不需要修改imageloader的调用