ReadHub项目Kotlin版转换指南(二、数据库和网络请求)
Android 开发中的 MVP 架构相信大家都已经熟悉,不熟悉的请右转 Google,ReadHub 项目从 Java 转换成 Kotlin 过程中,我们需要一套新的架构方式来实现(Kotlin 项目中没有使用 dagger2)。
base 为 MVP 架构的基础部分,user 为其具体使用过程。
base
BaseContract
interface BaseContract {
interface IView {
fun showLoading()
fun hideLoading()
}
interface IPresenter<V : IView> {
fun getView(): V
}
}
BaseContract
中定义了两个接口 IView
和 IPresenter
,
IView
接口中定义了 Loading
的操作,使其可以在每个 View
中使用,如果你的项目中有一些需要在大多数 View
中用到的函数,也可定义在此接口中。
IPresenter 中声明一个泛型 V
继承自 IView
,通过 getView
函数可以获取到该变量,用来回调 Model 中的结果给 View
。
BaseActivity && BaseFragment
abstract class BaseActivity<P : BaseContract.IPresenter<*>> : AppCompatActivity(), BaseContract.IView {
private var mKProgressHUD: KProgressHUD? = null
protected lateinit var mPresenter: P
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val layoutId = getLayoutId()
setContentView(layoutId)
initView()
initData()
}
protected abstract fun getLayoutId(): Int
protected abstract fun initView()
protected abstract fun initData()
override fun showLoading() {
mKProgressHUD = KProgressHUD.create(this)
mKProgressHUD?.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
?.setCancellable(true)
?.setAnimationSpeed(2)
?.setDimAmount(0.5f)
?.show()
}
override fun hideLoading() {
mKProgressHUD?.dismiss()
}
}
abstract class BaseFragment<P : BaseContract.IPresenter<*>> : Fragment(), BaseContract.IView {
private var mRootView: View? = null
private var mKProgressHUD: KProgressHUD? = null
protected lateinit var mPresenter: P
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
inflaterView(inflater, container)
return mRootView
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
initView(mRootView)
initData大专栏 ReadHub项目Kotlin版开发指南(三、MVP架构)n class="p">()
时间: 2024-11-05 13:26:09