I
Size: a a a
I
AD
viewState.doSomethingDangerous()
использоватьAD
AD
attachView`/`detachView
в параметре лежит view та, которая фрагмент-что-либо-ещеI
AO
I
AO
AO
I
I
AD
viewState
в кодеstate
или view
- окmViewState
или logViewState
- окviewState
коряво и неравномерно выглядитMM
viewState
в данном случае оптимально потому что:MM
viewState
— не чистое название поля класса, а более название, получаемое из геттера (`getViewState()`), и было бы странно иметь метод getMViewState()
или getLogViewState()
MM
internal val mViewState: ViewState<T>
get() = viewState
AD
internal val mViewState: ViewState<T>
get() = viewState
DB
AD
И
abstract class MvpLinearLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : LinearLayout(context, attrs, defStyle), MvpDelegateHolder {
private lateinit var parentDelegate: MvpDelegate<*>
private var delegate: MvpDelegate<MvpLinearLayout>? = null
override fun getMvpDelegate(): MvpDelegate<MvpLinearLayout> {
if (delegate != null) {
return delegate!!
}
delegate = MvpDelegate(this)
delegate!!.setParentDelegate(parentDelegate, id.toString())
return delegate!!
}
protected val tag = this::class.java.simpleName
fun init(parentDelegate: MvpDelegate<*>) {
this.parentDelegate = parentDelegate
mvpDelegate.onCreate()
mvpDelegate.onAttach()
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
mvpDelegate.onSaveInstanceState()
mvpDelegate.onDetach()
}
}
class AddressPicker @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : MvpLinearLayout(context, attrs, defStyle), AddressPickerView {
@Inject
lateinit var presenterFactory: AddressPickerPresenterFactory
@InjectPresenter
lateinit var presenter: AddressPickerPresenter
@ProvidePresenter
fun providePresenter(): AddressPickerPresenter = presenterFactory.create()
init {
di.inject(this)
LayoutInflater.from(context).inflate(R.layout.address_picker, this, true)
presenter.init()
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
address_picker.init(mvpDelegate)
}