BaseMvpFragment.kt 1.77 KB
Newer Older
1
package com.ydl.ydlcommon.base
konghaorui committed
2 3 4

import android.os.Bundle
import android.view.View
5 6 7 8
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
konghaorui committed
9 10 11 12 13

/**
 * Created by haorui on 2019-08-14.
 * Des:基础 MVP Fragment
 */
14
abstract class BaseMvpFragment<V : IView, P : IPresenter<V>> : BaseFragment(), MvpDelegateCallback<V, P>,
konghaorui committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    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)
30
        super.onViewCreated(view, savedInstanceState)
konghaorui committed
31 32 33 34 35 36 37 38 39
    }

    override fun onDestroyView() {
        super.onDestroyView()
        mvpDelegate?.onDestroyView()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        mvpDelegate?.onCreate(savedInstanceState)
40
        super.onCreate(savedInstanceState)
konghaorui committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    }

    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
    }
}