как иметь ссылку на компоновку привязки или на один из компонентов пользовательского интерфейса - PullRequest
0 голосов
/ 06 января 2019

Я учусь, как разрабатывать, используя MVVM. Я создал небольшой пример, как показано ниже в коде. У меня вопрос, я создал слой View и класс VM, и мне удалось уведомить BindingAdapter в Activity об объекте, который переносит данные, здесь я имею в виду объект, который помечен @ Bindable

То, что я собираюсь сделать, это иметь ссылку на один из компонентов пользовательского интерфейса, включенный в файл макета. Я ссылался на некоторые ссылки и обнаружил, что они используют метод findBinding (). Этот метод принимает параметр типа View. В одном из руководств говорится, что View, который должен быть передан findBinding (), может быть любым представлением !! Для меня это неясно, потому что я даже не знаю, как есть ссылка на мою компоновку привязки, которая является слоем просмотра.

Для первой строки

 ViewDataBinding bindingInTheViewLayer = DataBindingUtil.findBinding(activityMainBinding);

Я получил следующую ошибку:

error: method findBinding in class DataBindingUtil cannot be applied to given types;
required: View
found: ActivityMainBinding
reason: cannot infer type-variable(s) T
(argument mismatch; ActivityMainBinding cannot be converted to View)
where T is a type-variable:
T extends ViewDataBinding declared in method <T>findBinding(View)

Для второй строки

ViewDataBinding bindingInTheRegularView = DataBindingUtil.findBinding(new View(this));

Я получил

Log.e("MainActivity", "bindingInTheRegularView is NULL");

Пожалуйста, дайте мне знать, как сделать ссылку на макет привязки или на один из компонентов пользовательского интерфейса.

код

 ViewDataBinding bindingInTheViewLayer = DataBindingUtil.findBinding(activityMainBinding);
    ViewDataBinding bindingInTheRegularView = DataBindingUtil.findBinding(new View(this));
    /*if (bindingInTheViewLayer != null) {
        Log.i("MainActivity", "bindingInTheViewLayer: " + bindingInTheViewLayer);
    } else {
        Log.e("MainActivity", "bindingInTheViewLayer bindingInTheViewLayer is NULL");
    }*/

    if (bindingInTheRegularView != null) {
        Log.i("MainActivity", "bindingInTheRegularView: " + bindingInTheRegularView);
    } else {
        Log.e("MainActivity", "bindingInTheRegularView is NULL");
    }
...