데이터 바인딩 클래스가 생성되지 않았습니다. android:layout_width=”match_parent”

내 프로젝트에서 데이터 바인딩을 사용 <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