programing

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

minecode 2022. 8. 11. 21:47
반응형

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

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

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은 다음과

되지 않은 참조: databinding(데이터 ): (16, 38) 입니다.
":(37, 27)" "Fragment Binding Fragment Data Binding(Fragment 데이터 바인딩)"

Kotlin에서 Android-Databinding 라이브러리를 사용하려면 어떻게 해야 하나요?

의 레벨 ★★★★★★★★★★★★★★★★★★★★★★★★★」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.gradledir ( app dir ('관련 부분만'):

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을 사용하고 있습니다.

다음 구성을 사용해 보십시오.

main 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
}

새로운 해결책을 찾았습니다. 도움이 되길 바랍니다.

먼저 플러그인이 적용되었는지 확인합니다.

apply plugin: 'kotlin-kapt'

그리고나서

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

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

사용하다

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

대신

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

새로운 버전은 이쪽에서 확인하실 수 있습니다.

감사합니다.

또한 바인딩 클래스를 사용하기 전에 레이아웃 파일에서 레이아웃 태그를 사용하면 쉽게 할 수 있습니다.레이아웃 파일에서는 루트 뷰(예를 들어 제약조건 레이아웃) ALT+Enter -> 데이터 바인딩 클래스로 변환합니다.

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

1.0-rc4로 동작합니다.

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

당신의 의존관계로

Ghedeon씨, 댓글 링크 감사합니다.

업데이트: Hello World의 매우 간단한 예시 프로젝트입니다.

Data Binding 컴파일러 버전은 프로젝트 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"
}

그래들 버전은

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

다음은 kotlin에서의 데이터 바인딩 라이브러리 사용을 완료하기 위한 링크 예입니다.

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

저 같은 경우에는 이것으로 문제가 해결되었습니다.

앱 build.gradle에 추가했습니다.

buildFeatures {
    dataBinding true
    viewBinding true 
}

이 문제를 해결하려면 , 당신은 다음과 같이 해야 합니다.

apply plugin: 'kotlin-kapt'

build.gradle(모듈: app)의 맨 위에 있는 다음 이 행을 종속성에 배치합니다.

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

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

File > Project Structure > Project

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

서드파티 Gradle 플러그인이 원인일 수 있습니다.

이거 먹어봐.Andrid studio 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'
    }

Android Studio 버전 3.1.3에서 이 작업을 수행할 수 있습니다.

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

show usage sample

kotlin 구성 데이터 바인딩

build.gradle(폴더 앱)

apply plugin: 'kotlin-kapt'

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

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

코틀린을 즐겨라...

중요 업데이트

안드로이드의 설명서에서 볼 수 있습니다.

버전 3.2의 새로운 컴파일러는 디폴트로 유효하게 되어 있습니다.

따라서 Android Studio를 V3.2 이상으로 업데이트하고 불필요한 구성을 모두 삭제하십시오.

.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'

그래들 최신 버전을 사용합니다.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-module.properties

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

가 '오류'였습니다.Unresolved reference: RegisterationUserBinding레이아웃 이름을 사용했을 뿐입니다.fragment_registeration_userFragmentRegisterationUserBinding데이터 바인딩.

Gradle 모듈 파일에 이 항목을 추가합니다.

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

Kotlin에서 데이터 바인딩을 사용하려면 데이터 바인딩을 사용하도록 앱을 구성해야 합니다. .app 모듈의 build.gradle 파일에서 dataBinding 빌드 옵션을 활성화하면 코드를 다음과 같이 바꿀 수 있습니다.

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private lateint var mBinding: FragmentProfileBinding

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

        return mBinding.getRoot()
    }
}

상세한 것에 대하여는, 데이터 바인딩의 메뉴얼 링크(https://developer.android.com/topic/libraries/data-binding를 참조해 주세요.

추가 ★★★★★★★★★★★★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 } }

gradle.properties에 추가해 보세요.

android.databinding.enableV2=true

kotlin 언어를 사용하는 경우 를 사용하여 Android Project에서 Databinding

다음 단계

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

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

--두 번째 dataBinding이 true로 활성화되었습니다.

**dataBinding {
        enabled = true
    }**

이 모든 점이 "SYNC NOW"를 누른 후 app.build.gradle에 추가됩니다.

예를 들어 프로파일 액티비티를 편집하면 코틀린에서 바인딩 변수를 어떻게 정의합니까?

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

여기서 get binding은 바인딩 오브젝트의 유형을 처리하는 메서드입니다.

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

내 경우 추가

kapt {
    generateStubs = true
}

나를 위해 문제를 해결했다.처음에는 무시했지만, 문제와는 무관하다고 생각했습니다.

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

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

내 경험을 공유하고 싶다.Android Studio에서 Kotlin과 데이터 바인딩을 사용하는 것은 추가하기에 충분하다.

dataBinding {
    enabled = true
}

그 후 "동기화"를 하고 "프로젝트 만들기"를 하는 것이 매우 중요합니다.그런 다음 모든 개체를 사용할 수 있습니다.

Fragment Details Binding을 사용하기 전에 "태그 부모"에서 레이아웃 전체를 랩하고 모든 xmln을 레이아웃 태그로 이동한 후 프로젝트를 빌드함으로써 대응하는 레이아웃(fragment_details.xml)을 데이터 바인딩 레이아웃으로 변환해야 합니다.

내 경우, 레이아웃 파일에 헤더를 추가하는 것을 잊었을 뿐입니다.

<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">

....

Gradle 모듈(앱)에서 파일 추가

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

참고로 생성된 뷰 바인딩 이름은 클래스 이름이 아니라 레이아웃 파일 이름을 기준으로 합니다.

그 말은, 만약 당신이MainActivity대응 클래스activity_main.xml바인딩이 호출됩니다.ActivityMainBinding.

또, 잊지 말고, 반드시 초기화를 실시해 주세요.binding덧셈에 의한 변수

binding = ActivityMainBinding.inflate(layoutInflater)

에의onCreate()방법.

이것도 꼭 추가해 주세요.

setContentView(binding.root)

대신setContentView(R.layout.activity_main)(청취자가 전혀 작동하지 않게 됩니다)

언급URL : https://stackoverflow.com/questions/33165324/kotlin-android-unresolved-reference-databinding

반응형