Size: a a a

Moxy – MVP библиотека под Android

2020 January 13

I

Ilya in Moxy – MVP библиотека под Android
v это просто сокращённое viewState
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Ilya
А так мне кажется я просто в неправильном порядке поставил. Студия загрузится сейчас
может быть, но стоит все-таки viewState.doSomethingDangerous() использовать
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Ilya
v это просто сокращённое viewState
да нет же!
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Ilya
v это просто сокращённое viewState
в attachView`/`detachView в параметре лежит view та, которая фрагмент-что-либо-еще
а ViewState - это механизм, который работает с очередями команд
источник

I

Ilya in Moxy – MVP библиотека под Android
А, я в Moxy1 просто v = getViewState() писал, вспомнил. Ошибся
источник

AO

Artem Osipov in Moxy – MVP библиотека под Android
Понятно почему не работало)
источник

I

Ilya in Moxy – MVP библиотека под Android
А тут я ошибся потому, что я так в Mosby делал. Привык
источник

AO

Artem Osipov in Moxy – MVP библиотека под Android
Непонятно только в чем экономия такого присваивания. Потом искать по коду что это за v
источник

AO

Artem Osipov in Moxy – MVP библиотека под Android
Ну это лирика уже)
источник

I

Ilya in Moxy – MVP библиотека под Android
Оно в поле класса. Всё видно
источник

I

Ilya in Moxy – MVP библиотека под Android
теперь работает. Спасибо
источник

DB

Dmitro Boiko in Moxy – MVP библиотека под Android
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Artem Osipov
Непонятно только в чем экономия такого присваивания. Потом искать по коду что это за v
мне не нравится, как выглядит viewState в коде
если бы state или view - ок
если бы mViewState или logViewState - ок
но viewState коряво и неравномерно выглядит
источник

MM

Mikhail Mustakimov in Moxy – MVP библиотека под Android
Начинать переменные с m — стиль, принятый при разработке «внутренностей» андроида. Они не рекомендуют перенимать это. Название viewState в данном случае оптимально потому что:
1) показывает всю суть этой переменной
2) не содержит шума (m или log)
3) соответствует стандартам джавы
источник

MM

Mikhail Mustakimov in Moxy – MVP библиотека под Android
При этом viewState — не чистое название поля класса, а более название, получаемое из геттера (`getViewState()`), и было бы странно иметь метод getMViewState() или getLogViewState()
источник

MM

Mikhail Mustakimov in Moxy – MVP библиотека под Android
У себя, если вы используете котлин, можно завести базовый презентер, в котором сделать нечто такое
internal val mViewState: ViewState<T>
   get() = viewState
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Mikhail Mustakimov
У себя, если вы используете котлин, можно завести базовый презентер, в котором сделать нечто такое
internal val mViewState: ViewState<T>
   get() = viewState
а что мешает сделать это в Java, например?)

спасибо за разъяснения, конечно, но это можно было это не писать, это просто вкусовщина, у меня все ок 👌
источник

DB

Dmitro Boiko in Moxy – MVP библиотека под Android
Kotlin давно ушёл от m,s префиксов
источник

AD

Aleksey D. in Moxy – MVP библиотека под Android
Dmitro Boiko
Kotlin давно ушёл от m,s префиксов
вообще не в них дело, он в них и не был
источник
2020 January 14

И

Илья in Moxy – MVP библиотека под Android
Добрый день! Как правильно реализовать кастомное вью с презентером?
Я попробовал сделать по гайду:
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()
       
   }
}


Передача parentDelagate:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
       super.onViewCreated(view, savedInstanceState)

       address_picker.init(mvpDelegate)
   }


При запуске вываливается ошибка о том, что lateinit переменная presenter не инициализирована
Так же пробовал вызывать presenter.init() в onAttachedToWindow
источник