Как стать автором
Обновить

Комментарии 6

Когда на родную андроид MVC (данные/код/разметкаUI) пытаются напялить еще пару слоев других MVP становится грустно. Особенно когда View это не layout а Controller — это ни разу не фрагмент или активити.
говорят, что на андроиде нет MVC вообще-то
Тогда статья становится еще интереснее.
Использую в проекте MVP либу Nucleus (https://github.com/konmik/nucleus).
Весьма неплохая реализация.

Когда Android Data Bindings зарелизят с полной поддержкой студии, сразу перейду на MVVM.
> Android Data Binding… нет поддержки двунаправленного связывания (пока еще);

На самом деле это возможно обойти. Пишется один раз что-то вроде

    /**
     * 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 достаточно указать версию плагина

classpath 'com.android.tools.build:gradle:1.5.0'

и добавить

android {
    dataBinding {
        enabled = true
    }
}

А в AS 2 preview уже вроде нормально работает биндинг, не вызывает такую боль, как на стабильной версии.
По крайней мере в разметке не светится красным
Зарегистрируйтесь на Хабре, чтобы оставить комментарий