package com.ydl.ydlcommon.base
import android.os.Bundle
import android.view.View
import com.ydl.ydlcommon.mvp.base.IPresenter
import com.ydl.ydlcommon.mvp.base.IView
import com.ydl.ydlcommon.mvp.delegate.MvpDelegateCallback
import com.ydl.ydlcommon.mvp.delegate.MvpFragmentDelegateImpl
/**
* Created by haorui on 2019-08-14.
* Des:基础 MVP Fragment
*/
abstract class BaseMvpFragment<V : IView, P : IPresenter<V>> : BaseFragment(), MvpDelegateCallback<V, P>,
IView {
protected var mPresenter: P ?= null
protected var mvpDelegate: MvpFragmentDelegateImpl<V, P>?=null
get() {
if (field == null) {
this.mvpDelegate = MvpFragmentDelegateImpl(this, this, true)
}
return field
}
abstract override fun createPresenter(): P
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
mvpDelegate?.onViewCreated(view, savedInstanceState)
super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
mvpDelegate?.onDestroyView()
}
override fun onCreate(savedInstanceState: Bundle?) {
mvpDelegate?.onCreate(savedInstanceState)
super.onCreate(savedInstanceState)
}
override fun onDestroy() {
super.onDestroy()
mvpDelegate?.onDestroy()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mvpDelegate?.onSaveInstanceState(outState)
}
override fun getPresenter(): P {
return mPresenter ?: throw NullPointerException("Presenter uninitialized")
}
override fun setPresenter(presenter: P) {
this.mPresenter = presenter
}
override fun getMvpView(): V {
return this as V
}
}