Неразрешенная ссылка при импорте представлений из подмодуля с использованием kotlin-android-extensions - PullRequest
0 голосов
/ 20 сентября 2018

Когда я пытаюсь использовать внедрение представления kotlin-android-extensionions в многомодульном приложении, я получаю сообщение об ошибке при внедрении представления из подмодуля android.library:

Unresolved reference: component_xyz_user_name

У нас есть главный *Модуль 1004 * app и субмодуль android.library subm .Модуль приложения ссылается на subm.Оба эти модуля используют привязку данных, kapt и android-extensions.

В обоих модулях файлы gradle содержат:

apply plugin: 'com.android.library' //or com.android.application
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    [...]

    dataBinding.enabled = true
    androidExtensions.experimental = true
}

В библиотеке subm мы определяем component_user_info.xml viewопределяется следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">

    <data> [...] </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/component_xyz_user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </android.support.constraint.ConstraintLayout>
</layout>

где component_xyz_user_name - это представление, которое мы собираемся внедрить на следующем шаге.

В основном приложении мы определяем фрагмент_основной.xml вид выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>[...]</data>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/news_details_coordinator_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <include layout="@layout/component_user_info"
            />

    </android.support.design.widget.CoordinatorLayout>
</layout>

с ViewModel MainFragmentViewModel , определенным следующим образом:

import kotlinx.android.synthetic.main.component_user_info.*

class MainFragment : Fragment() {

    fun updateUserInfo() {
        component_xyz_user_name.text = "ABCDEF"
    }
}

СБОЙ компиляции со следующей ошибкой:

e: /Users/user/repos/project/app/src/main/java/com/company/users/MainFragment.kt: (108, 9): Unresolved reference: component_xyz_user_name
e: /Users/user/repos/project/app/src/main/java/com/company/users/MainFragment.kt: (109, 9): Unresolved reference: component_xyz_user_name

Почему я получаю Неразрешенная ссылка: component_xyz_user_name .Есть ли обходной путь для этого?

РЕДАКТИРОВАТЬ:

В качестве временного обходного решения Я написал следующую функцию расширения для Activity & Fragment:

/**
 * Find view in an activity
 */
fun <T : View> Activity.v(@IdRes resId: Int): T = findViewById(resId)

/**
 * Find view in a fragment
 */
fun <T : View> Fragment.v(@IdRes resId: Int): T = activity.findViewById(resId)

, чтобы я мог:

fun updateUserInfo() {
    v<TextView>(R.id.component_xyz_user_name).text = "ABCDEF"
}
...