Kotlin-Android : 확인되지 않은 참조 데이터 바인딩


143

새로운 데이터 바인딩 라이브러리를 사용하여 Java로 작성된 다음과 같은 조각 클래스가 있습니다.

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

컴파일하고 잘 실행됩니다.
Kotlin에서 다시 작성하려고 시도했으며 다음을 생각해 냈습니다.

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

그러나 이제 단계 :app:compileDebugKotlin는 다음을 출력합니다.

오류 : (16, 38) 해결되지 않은 참조 : 데이터 바인딩
오류 : (37, 27) 해결되지 않은 참조 : FragmentDataBinding

Kotlin과 함께 안드로이드 데이터 바인딩 라이브러리를 사용하려면 어떻게해야합니까?

내 최상위 build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

build.gradle앱 디렉토리에있는 내 (관련 부분 만) :

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'kotlin-android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

Android Studio 1.4, 빌드 도구 버전 23.0.1, Android SDK 23, SDK 도구 24.4.0을 사용하고 있습니다.


3
해당 문제에 대해 자유롭게 투표 하십시오
Ghedeon

1
apply plugin: 'kotlin-kapt'최신 버전의 앱 gradle 파일 만 있으면됩니다 .
Hesam

private lateinit var binding : FragmentDataBinding 더 나은 초기화 방법입니다
Dino Sunny

답변:


85

이 구성을 사용해보십시오.

메인 build.gradle에서 :

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
    //... rest of the content
    }
}

build.gradle :

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$android_plugin_version"
}

kapt {
    generateStubs = true
}

1
@Irampazzo를 2.2.0-alphaX사용할 수 있으며 참고로 데이터 바인딩 버전은 android-gradle-plugin 자체와 동일합니다. 따라서 해당 버전을 외부화하여 컴파일러 버전으로 사용할 수 있습니다.
Avinash R

1
나는이 대답은 데이터 바인딩과 코 틀린 내 문제를 해결 확인할 수 있습니다
라비 Jradi을

12
나는 apply plugin: 'kotlin-kapt'또한 추가해야했다 . stackoverflow.com/a/42974558/1916449
arekolek

나는 이것을 시도했다. 이제 순환 종속성 오류가 발생합니다. 이것에 대한 아이디어가 있습니까?
leoOrion

이에 대한 공식 문서는 kotlinlang.org/docs/tutorials/… 를 확인하십시오 .
Brian

72

나는 새로운 해결책을 찾았습니다. 그것이 도움이되기를 바랍니다.

우선 플러그인이 적용되었는지 확인하십시오.

apply plugin: 'kotlin-kapt'

그때

android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

종속성에 오류가있을 수 있습니다.

사용하다

kapt 'com.android.databinding:compiler:3.0.1'

대신에

compile 'com.android.databinding:compiler:3.0.1'

새 버전을 보려면 여기 를 방문 하십시오

감사합니다.


6
나는 여전히이 문제가있다 :(
Mladen Rakonjac

이것은 나를 위해 일하고 있습니다 (gradle wrapper 4.4, tools 3.1.0)
Sergio

kapt 'com.android.databinding : compiler : 3.0.1'을 추가하면 작동합니다.
Duran Jayson

"apply plugin : 'kotlin-kapt"만 추가하여 나를 위해 일했습니다. 감사.
Subhan Ali

그냥이 라인은 나를 위해 노력하고 있습니다 추가 된 (플러그인 적용 : '코 틀린-kapt') 안드로이드 스튜디오 3.2.1 - 1.3.0 플러그인 코 틀린
모하메드 ElSawaf

14

업데이트 2 : 이것은 정말 오래된 답변입니다. 대신 lrampazzo의 답변을 참조하십시오.

그것은 1.0-rc4와 함께 작동합니다.

kapt 'com.android.databinding:compiler:1.0-rc4' 

당신의 의존성에

의견의 링크에 대해 감사합니다 Ghedeon

업데이트 : 여기 정말 간단한 hello world 예제 프로젝트가 있습니다.


여전히 같은 오류가 발생합니다. 여기서 뭔가 잘못하고 있습니까? gist.github.com/xdgimf/820c433efa8307821788
Miguel Fermin

당신이 참조해야하는 경우 여기 내 build.gradle 파일의 gist.github.com/jaydeep17/9960fdb0e5a1ba85e82d을
Jaydeep Solanki

@Jaydeep 방금 시도해 보았습니다. 그러나 Android 스튜디오는 구문을 강조 표시하지 않고 message와 함께 많은 IDE 오류를 생성합니다 Exception while analyzing expression at (12,23) in /projectpath/KotlinDataBinding/app/src/main/java/com/example/kotlindatabinding/MainActivity.kt:. 같은 오류가 있습니까? 그리고 당신의 안드로이드 스튜디오 버전은 무엇입니까?
Mikhail

그것은 이미보고 된 것 @Arkadiy youtrack.jetbrains.com/issue/KT-8007을 BTW 나는 스튜디오 V1.5 미리보기 2에있어
Jaydeep Solanki

더 이상 최신 버전의 플러그인이 아닙니다. 불필요한 통증을 유발할 수 있습니다.
Avinash R

13

데이터 바인딩 컴파일러의 버전은 프로젝트 build.gradle 파일의 gradle 버전과 동일합니다.

// at the top of file 
apply plugin: 'kotlin-kapt'


android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.android.databinding:compiler:3.0.0-beta1"
}

그리고 gradle 버전은

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

다음은 kotlin에서 데이터 바인딩 라이브러리를 사용하여 완료하는 예제 링크입니다.

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6


dataBinding.enabled = true내가 잊고 있었던 것
Cesar Castro

7

문제를 해결하려면

apply plugin: 'kotlin-kapt'

build.gradle (Module : app) 상단에 다음 줄을 의존성에 넣습니다.

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

메뉴로 이동하여 안드로이드 플러그인 버전을 찾을 수 있습니다

File > Project Structure > Project

그런 다음 다시 동기화하십시오. 이 경고가 표시되면 무시하십시오.

타사 Gradle 플러그인이 원인 일 수 있습니다.


6

안드로이드 스튜디오 2.0 (2.1)

에서 build.gradle

android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

내 프로젝트에서 : buildToolsVersion = "23.0.3"

최상위 build.gradle에서

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }

2
컴파일러와 Android 빌드 도구 gradle 플러그인 모두에 동일한 버전을 사용해야합니다. 그렇지 않으면 예기치 않은 빌드 문제가 발생할 수 있습니다.
Avinash R

나는 플러그인 적용 추가했다 : '코 틀린-kapt를'
안드리 코발 추크에게

6

이것은 androidStudio ver3.1.3에서 나를 위해 작동합니다.

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

사용 샘플 표시


4

kotlin의 구성 데이터 바인딩

build.gradle (폴더 앱)

apply plugin: 'kotlin-kapt'

android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

코 틀린을 즐기십시오 ...


플러그인 적용 : Kotlin에서 'kotlin-kapt'는 정말 중요합니다.
Rahul Rastogi 19 :

3

중요 업데이트

Android 설명서 에서 확인할 수 있습니다 .

버전 3.2의 새로운 컴파일러는 기본적으로 활성화되어 있습니다.

그래서 그냥 업데이트 하여 V3.2에 안드로이드 스튜디오를 하거나 새로운 . 불필요한 구성을 모두 제거하십시오.

따라서 app level에서 dataBinding을 활성화하십시오 build.gradle.

android {
    dataBinding {
        enabled = true
    }
}

자동으로 모든 작업을 수행합니다.

아래 줄을 안전하게 제거 할 수 있습니다.

  • databinding.compiler를 제거하십시오

    kapt 'com.android.databinding:compiler:3.0.1'
  • 없애다 kapt

    kapt {
        generateStubs = true
    }

내 완전한 구성

build.gradle (프로젝트)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

gradle 최신 버전을 사용하십시오 . kotlin 최신 버전을 사용하십시오 .

build.gradle (앱)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

중요 구성을 복사하여 붙여 넣기 만하지 마십시오. Kotlin 버전을 설정하려면 이 답변 을 참조하십시오 .

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

내 프로젝트는 여전히 gradle 3.0.1 릴리스에 있으므로 작동하지 않습니다.
naqi

보다 안정적인 안정성을 위해 Android Studio 및 gradle을 업데이트 할 수 있습니다.
Khemraj

3

제 경우에는 오류가 Unresolved reference: RegisterationUserBinding방금 fragment_registeration_user이와 같은 레이아웃 이름을 사용 FragmentRegisterationUserBinding하여 데이터 바인딩 레이아웃에서 만들었고 오류가 사라 졌다는 것입니다.


당신은 위대합니다! 문제를 해결하기 위해 여러 제안을 적용하는 데 많은 시간을 보냈지만이 답변을 찾을 때까지 무기력합니다. 조각 레이아웃 이름에 따라 바인딩을 변경하면 문제가 해결됩니다. 고마워
Ajay

다행 그것은 당신에게 도움이
EL TEGANI 모하메드 하마드 가비 르에게

2

당신의 다음을 추가 app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

이것은 트릭을 할 것입니다.

$android_plugin_version의 버전 com.android.tools.build:gradleapplication build.gradle

또한 이것을 모듈에 추가하십시오 build.gradle

android { /// Existing Code kapt { generateStubs = true } }


0

kotlin 언어를 사용할 때 사용하는 Android 프로젝트에서 데이터 바인딩을 추가하십시오.

아래 단계

-먼저 아래 플러그인을 추가해야합니다

**apply plugin: 'kotlin-kapt'**

-두 번째 데이터 바인딩 활성화 됨

**dataBinding {
        enabled = true
    }**

"SYNC NOW"를 누른 후 app.build.gradle에이 지점이 모두 추가되었습니다.

예를 들어 프로파일 활동을 편집 한 다음 kotlin에서 바인딩 변수를 정의하는 방법 ??

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

여기서 get 바인딩은 어떤 유형의 바인딩 객체를 처리하는 방법입니다.

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

데이터 바인딩 Librabry kapt 'com.android.databinding : 컴파일러 : 2.3.1'
Shripal 샤

0

내 경우에는

kapt {
    generateStubs = true
}

나를 위해 문제를 해결했습니다. 나는 그것을 처음 무시했다. 문제와 관련이 없다고 생각했다.

해결되지 않은 참조 데이터 바인딩

그러나 이제 데이터 바인딩이 제대로 작동합니다.


0

내 자신의 경험을 공유하고 싶습니다. 안드로이드 스튜디오에서 Kotlin으로 데이터 데이터 바인딩을 사용하면 충분합니다.

dataBinding {
    enabled = true
}

그 후에 "동기화"하고 "프로젝트 만들기"는 매우 중요합니다. 그 후 모든 객체가 활성화됩니다.


0

FragmentDetailsBinding을 사용하기 전에 전체 레이아웃을 ""태그 상위로 래핑하고 모든 xmlns를 레이아웃 태그로 이동하여 해당 레이아웃 (fragment_details.xml)을 데이터 바인딩 레이아웃으로 변환했는지 확인한 다음 프로젝트를 빌드하십시오.


-1

모든 데이터 바인딩 종속성에서 벗어나서 대신 사용하십시오.

android {
    dataBinding {
        enabled = true
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.