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.gradle
dir ( 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
}
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_user
FragmentRegisterationUserBinding
데이터 바인딩.
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:gradle
application 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
'programing' 카테고리의 다른 글
#include in .h or .c / .cpp? (0) | 2022.08.11 |
---|---|
Laravel : Vue js가 로드되기 전에 보간 코드를 숨기려면 어떻게 해야 합니까? (0) | 2022.08.11 |
ASP.Net Core 3.0 웹 애플리케이션 및 Vue 타임아웃 예외 Visual Studio 2019 v16.4 (0) | 2022.08.11 |
java.lang을 사용하는 것이 좋은 방법입니까?String.intern()? (0) | 2022.08.11 |
Java의 Collections.singletonList()를 사용하시겠습니까? (0) | 2022.08.11 |