Комментарии 6
Когда на родную андроид MVC (данные/код/разметкаUI) пытаются напялить еще пару слоев других MVP становится грустно. Особенно когда View это не layout а Controller — это ни разу не фрагмент или активити.
Использую в проекте MVP либу Nucleus (https://github.com/konmik/nucleus).
Весьма неплохая реализация.
Когда Android Data Bindings зарелизят с полной поддержкой студии, сразу перейду на MVVM.
Весьма неплохая реализация.
Когда Android Data Bindings зарелизят с полной поддержкой студии, сразу перейду на MVVM.
> Android Data Binding… нет поддержки двунаправленного связывания (пока еще);
На самом деле это возможно обойти. Пишется один раз что-то вроде
Правда надо писать свой BaseObservable (с дефолтным не работает).
Я в своем проекте вдоволь наигрался с Android Data Binding и мне очень понравилось. github.com/httpdispatch/MissedNotificationsReminder
Что еще не очень хорошо работает, так это unboxing для кастомных Observables. Т.е. если имеем свой BindableBoolean myField, то в layout нельзя писать @{model.myField? «true value»: «false value»}, а надо обязательно @{model.myField.get()? «true value»: «false value»}
На самом деле это возможно обойти. Пишется один раз что-то вроде
/**
* Bind the {@link EditText} view with the {@link BindableString}
*
* @param view the view to bind observable with
* @param observable the observable to bind the view with
*/
@BindingAdapter({"bind:binding"})
public static void bindEditText(EditText view,
final BindableString observable) {
if (view.getTag(R.id.binded) == null) {
// if the binding was not done before
view.setTag(R.id.binded, true);
// subscribe view to the observable value changed event
RxBindingUtils
.valueChanged(observable)
.filter(value -> !TextUtils.equals(view.getText(), value)) // filter if value
// doesn't need to be updated
.subscribe(RxTextView.text(view))
;
// subscribe observable to the text changes event
RxTextView.textChanges(view)
.map(cs -> cs.toString())
.subscribe(observable.asAction());
}
}
Правда надо писать свой BaseObservable (с дефолтным не работает).
Я в своем проекте вдоволь наигрался с Android Data Binding и мне очень понравилось. github.com/httpdispatch/MissedNotificationsReminder
Что еще не очень хорошо работает, так это unboxing для кастомных Observables. Т.е. если имеем свой BindableBoolean myField, то в layout нельзя писать @{model.myField? «true value»: «false value»}, а надо обязательно @{model.myField.get()? «true value»: «false value»}
теперь для подключения android data binding достаточно указать версию плагина
и добавить
А в AS 2 preview уже вроде нормально работает биндинг, не вызывает такую боль, как на стабильной версии.
По крайней мере в разметке не светится красным
classpath 'com.android.tools.build:gradle:1.5.0'
и добавить
android {
dataBinding {
enabled = true
}
}
А в AS 2 preview уже вроде нормально работает биндинг, не вызывает такую боль, как на стабильной версии.
По крайней мере в разметке не светится красным
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование шаблона MVVM (Model-View-ViewModel) в Android