*EDIT: Чтобы ответить на мой собственный вопрос, мне пришлось добавить EditorViewModel в качестве импорта в родительский абстрактный класс во внешнем макете и преобразовать viewModel в родительский класс, используя app:viewModel="@{( (EditorViewModel)viewModel)}", вот и все! Клянусь, я не помню, чтобы делал это раньше...*
Моя проблема возникает из-за того, что включенный макет определяет тип, который является родительским абстрактным классом, а НЕ дочерним конкретным классом модели представления, которую внешний макет пытается разделить с включенным макетом.
Я подтвердил, что изменение типа включенного макета на тип дочернего конкретного класса устраняет проблему, однако он должен работать с типом абстрактного класса...
Вот как я определяю свою переменную viewModel, это конкретный класс следующего типа:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.ootpapps.gpeofflinedatacollection.viewmodels.EquipmentEditorViewModel" />
</data>
...
Несколькими утверждениями позже я включаю макет, пытаясь поделиться viewModel сверху:
<include
layout="@layout/layout_spinner_location"
app:viewModel="@{viewModel}" />
В включенном макете переменная viewModel определяется следующим образом:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.ootpapps.gpeofflinedatacollection.viewmodels.EditorViewModel" />
</data>
И, конечно же, вот EquipmentEditorViewModel, показывающий, что он расширяет абстрактный родительский класс EditorViewModel (определенный как тип родительского класса выше во включенном макете):
public class EquipmentEditorViewModel extends EditorViewModel<Equipment> {
Ошибка, которую я получаю:
****/ошибка привязки данных ****msg: Не удается найти установщик для атрибута 'app:viewModel' с типом параметра com.ootpapps.gpeofflinedatacollection.viewmodels.EquipmentEditorViewModel в com.ootpapps.gpeofflinedatacollection.databinding.LayoutSpinnerLocationBinding. файл: C:\Users\Ryan\AndroidstudioProjects\GPEOfflineDataCollection\app\src\main\res\layout\content_equipment_editor.xml loc:31:33 - 31:41 ****\ ошибка привязки данных ****
Как я упоминал выше, изменение типа в layout_spinner_location на «EquipmentEditorViewModel» исправляет ошибку, ОДНАКО мне нужно использовать абстрактный тип, чтобы повторно использовать это представление, поскольку оно не всегда использует EquipmentEditorViewModel, иногда ему требуется « ToolEditorViewModel" или "MeasurmentEditorViewModel", все из которых расширяют EditorViewModel.
Большое спасибо за Вашу помощь. Может быть, мне повезет, и Джордж Маунт заглянет.