BaseDemo
🔥🔥🔥BaseDemo 是Android MVVM + Retrofit + OkHttp + Coroutine 协程 + Room + 组件化架构的Android应用开发规范化架构,通过不断的升级迭代,目前主要分为两个版本,分别为分支 MVVM+Databinding 组件化版本,分支MVVM+Databinding+Single 单体版本。旨在帮助您快速构建属于自己的APP项目架构,做到快速响应上手,另外再长期的实践经验中汇总了大量的使用工具类,主要放在了项目 `lib_common` 组件中,以供大家参考使用。具体使用请开发者工具自己项目需求决定选择如何使用。
Install / Use
/learn @zhouhuandev/BaseDemoREADME
BaseDemo
介绍
🔥🔥🔥 BaseDemo 是Android MVVM + Retrofit + OkHttp + Coroutine 协程 + ViewBinding & DataBinding + Room + 组件化架构的Android应用开发规范化架构,通过不断的升级迭代,目前主要分为两个版本,分别为分支 MVVM+Databinding 组件化版本,分支MVVM+Databinding+Single 单体版本。旨在帮助您快速构建属于自己的APP项目架构,做到快速响应上手,另外再长期的实践经验中汇总了大量的使用工具类,主要放在了项目 lib_common组件中,以供大家参考使用。具体使用请开发者工具自己项目需求决定选择如何使用。
如果我的付出可以换来对您的帮助的话,还请您点个start,将会是我不懈更新的动力,万分感谢。如果在使用中有任何问题,请留言
- 电子邮件:zhouhuandev@gmail.com
地址
Github: https://github.com/zhouhuandev/BaseDemo
Gitee: https://gitee.com/zhouhuandev/BaseDemo
功能演示
软件架构说明
<table> <tr> <td align="center"> <h3>上拉加载,下拉刷新</h3> </td> <td align="center"> <h3>演示入口</h3> </td> </tr> <tr> <td align="center"> <img src="https://raw.githubusercontent.com/zhouhuandev/BaseDemo/mvvm%2Bdatabinding/image/161637674837_.pic.jpg" alt="Home" style="zoom:30%;" /> </td> <td align="center"> <img src="https://raw.githubusercontent.com/zhouhuandev/BaseDemo/mvvm%2Bdatabinding/image/171637674836_.pic.jpg" alt="Home" style="zoom:30%;" /> </td> </tr> </table> <table> <tr> <td align="center"> <h3>SaveStateHandler操作示例</h3> </td> <td align="center"> <h3>Room操作示例</h3> </td> </tr> <tr> <td align="center"> <img src="https://raw.githubusercontent.com/zhouhuandev/BaseDemo/mvvm%2Bdatabinding/image/151637674836_.pic.jpg" alt="Home" style="zoom:30%;" /> </td> <td align="center"> <img src="https://raw.githubusercontent.com/zhouhuandev/BaseDemo/mvvm%2Bdatabinding/image/141637674835_.pic.jpg" alt="Home" style="zoom:30%;" /> </td> </tr> </table>- 扫码体验APK
项目功能
项目架构

- 集成模式:所有的业务组件被“app壳工程”依赖,组成一个完整的APP;
- 组件模式:可以独立开发业务组件,每一个业务组件就是一个APP;
- app壳工程:负责管理各个业务组件,和打包apk,没有具体的业务功能;
- 业务组件:根据公司具体业务而独立形成一个的工程;
- 功能组件:提供开发APP的某些基础功能,例如打印日志、下拉刷新控件等;
- Main组件:属于业务组件,指定APP启动页面、主界面;
- Common组件:属于功能组件,支撑业务组件的基础,提供多数业务组件需要的功能
MVVM架构
BaseMVVM架构

官方指导MVVM架构

- View层类关系图

- ViewModel层类关系图

核心基础库 lib_base
MVVM十大的核心公用基类和六大基础页面接口
基础页面接口
- 视图层核接口 BaseView
interface BaseView : ILoadView, INoDataView, ITransView, INetErrView {
fun initListener()
fun initData()
fun finishActivity()
}
- 加载初始化弹窗接口 ILoadView
interface ILoadView {
//显示初始加载的View,初始进来加载数据需要显示的View
fun showInitLoadView()
//隐藏初始加载的View
fun hideInitLoadView()
}
- 显示是否有数据页面接口 INoDataView
interface INoDataView {
//显示无数据View
fun showNoDataView()
//隐藏无数据View
fun hideNoDataView()
//显示指定资源的无数据View
fun showNoDataView(@DrawableRes resid: Int)
}
- 显示小菊花View接口 ITransView
interface ITransView {
//显示背景透明小菊花View,例如删除操作
fun showTransLoadingView()
//隐藏背景透明小菊花View
fun hideTransLoadingView()
}
- 显示是否网络错误View接口 INetErrView
interface INetErrView {
//显示网络错误的View
fun showNetWorkErrView()
//隐藏网络错误的View
fun hideNetWorkErrView()
}
- 基础刷新接口 BaseRefreshView
interface BaseRefreshView {
/**
* 是否启用下拉刷新
* @param b
*/
fun enableRefresh(b: Boolean)
/**
* 是否启用上拉加载更多
*/
fun enableLoadMore(b: Boolean)
/**
* 刷新回调
* 向 ViewModel 发送刷新请求
*/
fun onRefreshEvent()
/**
* 加载更多的回调
* 向 ViewModel 发送加载更多请求
*/
fun onLoadMoreEvent()
/**
* 自动加载的事件
* 向 ViewModel 发送自动加载的请求
*/
fun onAutoLoadEvent()
/**
* 停止刷新
*/
fun stopRefresh()
/**
* 停止加载更多
*/
fun stopLoadMore()
/**
* 自动加载数据
*/
fun autoLoadData()
}
BaseActivity
abstract class BaseActivity : RxAppCompatActivity(), BaseView {
abstract fun onBindLayout(): Int
abstract fun initView()
abstract override fun initData()
override fun initListener()
}
BaseMvvmActivity
abstract class BaseMvvmActivity<VM : BaseViewModel> : BaseActivity() {
/**
* 绑定 ViewModel
*/
abstract fun onBindViewModel(): Class<VM>
/**
* 放置 观察者对象
*/
abstract fun initViewObservable()
}
BaseMvvmDataBindingActivity
abstract class BaseMvvmDataBindingActivity<V : ViewDataBinding, VM : BaseViewModel> : BaseMvvmActivity<VM>(), ActivityBindingHolder<V> by ActivityBinding() {
abstract fun onBindVariableId(): MutableList<Pair<Int, Any>>
}
BaseMvvmRefreshActivity
abstract class BaseMvvmRefreshActivity<T, VM : BaseRefreshViewModel<T>> : BaseMvvmActivity<VM>(), BaseRefreshView {
protected abstract fun initRefreshView(): Int
protected abstract fun enableRefresh(): Boolean
protected abstract fun enableLoadMore(): Boolean
}
BaseMvvmRefreshDataBindingActivity
abstract class BaseMvvmRefreshDataBindingActivity<T, V : ViewDataBinding, VM : BaseRefreshViewModel<T>> : BaseMvvmDataBindingActivity<V, VM>(), BaseRefreshView {
protected abstract fun onBindRefreshLayout(): Int
protected abstract fun enableRefresh(): Boolean
protected abstract fun enableLoadMore(): Boolean
}
BaseFragment
abstract fun onBindLayout(): Int
abstract fun initView(mView: View)
abstract override fun initData()
BaseMvvmFragment
abstract class BaseMvvmFragment<VM : BaseViewModel> : BaseFragment() {
abstract fun onBindViewModel(): Class<VM>
abstract fun initViewObservable()
}
BaseMvvmDataBindingFragment
abstract class BaseMvvmDataBindingFragment<V : ViewDataBinding, VM : BaseViewModel> : BaseMvvmFragment<VM>(), FragmentBindingHolder<V> by FragmentBinding() {
abstract fun onBindVariableId(): MutableList<Pair<Int, Any>>
}
BaseMvvmRefreshFragment
abstract class BaseMvvmRefreshFragment<T, VM : BaseRefreshViewModel<T>> : BaseMvvmFragment<VM>(), BaseRefreshView {
protected abstract fun onBindRefreshLayout(): Int
protected abstract fun enableRefresh(): Boolean
protected abstract fun enableLoadMore(): Boolean
}
BaseMvvmRefreshDataBindingFragment
abstract class BaseMvvmRefreshDataBindingFragment<T, V : ViewDataBinding, VM : BaseRefreshViewModel<T>> :
BaseMvvmDataBindingFragment<V, VM>(),
BaseRefreshView {
protected abstract fun onBindRefreshLayout(): Int
protected abstract fun enableRefresh(): Boolean
protected abstract fun enableLoadMore(): Boolean
}
- BaseFragmentPagerAdapter
- BaseSkeletonAdapter
- IBaseViewModel
- BaseViewModel
- BaseRefreshViewModel ...
功能特色
- 支持是否使用
ToolBar
open fun enableToolbar(): Boolean {
return true
}
- 支持自定义
ToolBar
open fun onBindToolbarLayout(): Int {
return R.layout.common_toolbar
}
- 支持标题文字图标信息自定义
open fun getTootBarTitle(): String {
return ""
}
/**
* 设置返回按钮的图样,可以是Drawable ,也可以是ResId
* 注:仅在 enableToolBarLeft 返回为 true 时候有效
*
* @return
*/
open fun getToolBarLeftIcon(): Int {
return R.drawable.ic_white_black_45dp
}
/**
* 是否打开返回
*
* @return
*/
open fun enableToolBarLeft(): Boolean {
return false
}
/**
* 设置标题右边显示文字
*
* @return
*/
open fun getToolBarRightTxt(): String {
return ""
}
/**
* 设置标题右边显示 Icon
*
* @return int resId 类型
*/
open fun getToolBarRightImg(): Int {
return 0
}
/**
* 右边文字监听回调
* @return
*/
open fun getToolBarRightTxtClick(): View.OnClickListener? {
return null
}
/**
* 右边图标监听回调
* @return
*/
open fun getToolBarRightImgClick(): View.OnClickListener? {
return null
}
- 支持
loading加载数据
override fun showInitLoadView() {
showInitLoadView(true)
}
override fun hideInitLoadView() {
showInitLoadView(false)
}
- 支持透明
loading的加载数据
override fun showTransLoadingView() {
showTransLoadingView(true)
}
override fun hideTransLoadingView() {
showTransLoadingView(false)
}
- 支持是否使用全屏显示
open fun enableAllowFullScreen(): Boolean {
return false
}
- 支持是否打开EventBus
open fun enableEventBus(): Boolean = false
- 支持显示无数据
override fun showNoDataView() {
showNoDataView(true)
}
override fun showNoDataView(resid: Int) {
showNoDataView(true, resid)
}
override fun hideNoDataView() {
showNoDataView(false)
}
- 支持网络网络错误显示
override fun hideNetWorkErrView() {
showNetWorkErrView(false)
}
override fun showNetWorkErrView() {
showNetWorkErrView(true)
}
- 支持
Fragment的懒加载
/**
* 懒加载机制 当页面可见的时候加载数据
* 如果当前 FragmentTransaction.setMaxLifecycle 处理 Lifecycle.State.RESUMED 则 懒加载失效
* 如果 FragmentTransaction.setMaxLifecycle 传入BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT ,
* 则只有当前的Fragment处于Lifecycle.State.RESUMED状态。 所有其他片段的上限为Lifecycle.State.STARTED 。
* 如果传递了BEHAVIOR_SET_USER_VISIBLE_HINT ,则所有片段都处于Lifecycle.State.RESUMED状态,
Related Skills
node-connect
337.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
