내 프로젝트에서 데이터 바인딩을 사용 <layout>
하고 <data>
있는데 xml 바인딩 클래스가 생성되지 않았습니다.
예를 들어 activity_main.xml이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data> </data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
이제 ActivityMainBinding
내 활동 / 조각을 작성 하면 클래스를 사용할 수 없다는 오류가 표시됩니다. 하지만 <variable>
내 xml 파일에 포함 하면 ActivityMainBinding
클래스 를 생성 할 수 있습니다.
Android 스튜디오 : 2.1.3
클래스 경로 : com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0
답변
만족스러운 답을 얻지 못했습니다. 여기 내 데이터 바인딩 지식을 요약 한 팁이 있습니다.
데이터 바인딩 문제 해결을위한 팁
최신 정보
더 정확한 오류 와 제안 을 얻으려면 Android Studio 및 Gradle 플러그인 버전을 최신 버전으로 업데이트하는 것이 좋습니다. AS 3.2 버전 이후에는 많은 문제가 발생하지 않았기 때문입니다.
참조 안드로이드 스튜디오 최신 및 최신 Gradle을 플러그인 .
Orignal 솔루션
이 답변을 읽은 후에 는 클래스 및 데이터 변수 모두에 대한 데이터 바인딩 자동 생성 문제 에 갇히지 않을 것 입니다.
이 점을 하나씩 확인하십시오. 이들 중 어느 것이 든 작업을 완료 할 수 있습니다. 마지막 포인트 3은 정말 중요하므로 놓치지 마세요.
1. 데이터 바인딩이 활성화되었는지 확인
에서 데이터 바인딩을 활성화 해야합니다 build.gradle
. 그렇지 않은 경우 이것을 추가하고 Sync .
android {
...
dataBinding {
enabled = true
}
...
}
2. 레이아웃이 바인딩 레이아웃으로 변환되었는지 확인합니다.
이제 데이터 바인딩 클래스를 생성하려면 데이터 바인딩 ( 태그)으로 래핑xml layout
해야합니다 <layout
. 이 같은.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
이 검사와 함께 바인딩 변수 이름이 뷰 모델 클래스에서와 같이 올바른지 확인합니다.
3. 자동 생성 된 바인딩 클래스 이름?
데이터 바인딩 클래스는 바인딩 레이아웃을 만든 후에 생성해야합니다.
레이아웃 이름이 스네이크 케이스 인 경우
activity_main.xml
데이터 바인딩 클래스가 와 같은 카멜 케이스 로 생성됩니다ActivityMainBinding
.
4. 가져 오기 제안을 볼 수 없습니까?
입력 할 때 때때로 ActivityMai...
, 그것은 제안을 표시하지 않습니다 그 경우에, 수동으로 가져 오기 .
import <yourpackage>databinding.ActivityMainBinding;
5. 빌드 실패 Logcat 읽기
빌드가 실패하면 바인딩 클래스와 레이아웃의 새 변수가 생성되지 않습니다. 그래서 일단 만들기 프로젝트 로 Ctrl + F9 (빌드> 만들기 프로젝트) .
- 빌드가 실패하면 오류가 무엇인지 확인합니다. 일반적으로 레이아웃 필드에 오류가 있습니다. 오류 로그에 문제가있는 오류 줄 번호가 표시됩니다.
- 바인딩이 실패 하면 구문 오류 또는 가져 오기 누락과 같은 어리석은 오류가 발생할 수 있습니다 . 이 경우 바인딩 클래스의 오류로 가득 찬 logcat이 표시됩니다. 그러나 적절한 문제 를 찾으 려면 완전한 logcat 을 읽어야 합니다.
6. 최근에서 프로젝트를 닫고 엽니 다.
Rebuild
/ Make
프로젝트 보다 시간이 훨씬 적게 걸리기 때문에 항상 이렇게합니다 .
- 파일> 프로젝트 닫기에서 프로젝트 닫기
- 최근에서 다시 열기
참고 내가 선호 닫기 열기 에서 최근 이보다 훨씬 적은 시간이 걸리기 때문에 다시 작성 / 다시 시작 IDE를 .
7. 프로젝트 재 구축
여전히 클래스가 생성되지 않으면. (때때로 레이아웃 파일을 붙여 넣으면 발생합니다). 그런 다음 ( Not Build 또는 Make project ) 에서 프로젝트 를 다시 빌드하십시오 . 데이터 바인딩 클래스를 생성합니다. ( Rebuild는 나를 위해 Magic을 사용합니다. )Build> Rebuild
8. 최신 Android Studio 보유
AS를 Android Studio 3.2로 업데이트 한 후 데이터 바인딩 자동 생성에서 많은 버그가 수정되는 것을 느꼈습니다. 따라서 최신 AS도 있어야합니다.
솔루션 <variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
일반적으로 레이아웃에 변수를 넣으면 getter와 setter가 생성됩니다. 그리고 우리는 사용 binding.setItem(item);
하고 binding.getItem();
있지만, 그 방법을 볼 수없는 경우 다음 정보 아래를 참조하십시오.
1. 최근부터 프로젝트 닫기 및 열기
데이터 변수를 생성 한 경우- <variable
레이아웃 에서 데이터 바인딩 클래스에 setter 및 getter 가 표시되지 않으면 최근 항목에서 닫기 및 열기 프로젝트 .
2. 유형 변경 후 프로젝트 정리
<variable
레이아웃에서 일부 유형을 변경 하고 getter setter 유형이 변경되지 않으면 프로젝트 정리 ( Build> Clean Project
)
마지막 단어
마지막으로 여전히 바인딩 클래스가 생성되지 않으면 가장 강력한 무기가 있습니다. – 다시 시작 안드로이드 스튜디오 : D
- 첫째, 다시 시작하십시오. 다시 시작 하면 항상 바인딩 레이아웃의 변수가 생성됩니다.
- 작동하지 않으면 캐시 를 무효화하고 다시 시작하십시오 .
이것이 내 데이터 바인딩 오류를 해결하기 위해 내가하는 전부입니다. 추가 문제가 발생하면 여기에 의견을 남길 수 있습니다.
답변
자동으로 생성되는 DataBinding 클래스.
xml 이름이 activity_test이면 Binding 클래스는 ActivityTestBinding이됩니다.
그러나,
dataBinding {
enabled = true
}
레이아웃은 루트로 레이아웃을 가져야합니다.
<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>
답변
나는 같은 문제가 있었다. android sdk 문서를 읽은 후 생성 될 예상 파일 이름 만 있지만 발생하지 않을 경우 수행 할 작업에 대한 내용은 없습니다. 좀 더 많은 조사를 한 후에 (귀하의 예를 사용하여) 아래와 같이 레이아웃 요소에 네임 스페이스를 제거한 후 저에게 효과적이라는 것을 알았습니다.
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data> </data>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
답변
제 경우에는 Binding 클래스가 생성되어 제자리에 있습니다 (하지만 그렇지 않다고 생각했습니다) …하지만 해당 클래스의 가져 오기를 활동 / 조각 가져 오기 섹션에 자동으로 추가하지 않습니다 … 그래서 … OPTION + 시작하다 🙂
답변
제대로 설정 한 후 (xml 네임 스페이스 포함 및 모든 것을으로 래핑 <layout>
) 저에게 도움이 된 것은 Build-> Make project였습니다. Clean Project 또는 Rebuild Project도 마찬가지입니다. 저는 26.0.2 빌드 도구를 사용하는 Android Studio 2.3.1에 있습니다. <data>
태그 가 필요 없습니다 .
답변
기본 작업을 수행하는 경우 gradle에서 enable을 사용 하고 xml에서 레이아웃 태그를 사용하는 것과 같이 프로젝트 에서 데이터 베인 딩을 활성화 하려면 xml 코드를 변경하고 해당 xml에 대한 새 데이터 바인딩 클래스를 생성하지 않은 경우 생성 전용 데이터에 대해 빠른 방법을 사용할 수 있습니다. gradle-> other-> databindinggenbaseclasses의 바인딩 클래스 전체 프로젝트보다 빠르게 디버깅하십시오 . 데이터 바인딩 클래스 만 생성합니다.
답변
dataBinding {
enabled = true
}
새 데이터 바인딩 컴파일러를 사용하려면 gradle.properties 파일에 다음 옵션을 추가하십시오.
android.databinding.enableV2=true