SkillAgentSearch skills...

BaseDemo

🔥🔥🔥BaseDemo 是Android MVVM + Retrofit + OkHttp + Coroutine 协程 + Room + 组件化架构的Android应用开发规范化架构,通过不断的升级迭代,目前主要分为两个版本,分别为分支 MVVM+Databinding 组件化版本,分支MVVM+Databinding+Single 单体版本。旨在帮助您快速构建属于自己的APP项目架构,做到快速响应上手,另外再长期的实践经验中汇总了大量的使用工具类,主要放在了项目 `lib_common` 组件中,以供大家参考使用。具体使用请开发者工具自己项目需求决定选择如何使用。

Install / Use

/learn @zhouhuandev/BaseDemo
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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
<img src="https://www.pgyer.com/app/qrcode/tBPE" alt="下载二维码" style="zoom:100%;" />

项目功能

项目架构

项目架构

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

MVVM架构

BaseMVVM架构

官方指导MVVM架构

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

View on GitHub
GitHub Stars277
CategoryDevelopment
Updated10d ago
Forks66

Languages

Java

Security Score

100/100

Audited on Mar 16, 2026

No findings