두 개의 다른 뷰에서 동일한 BindingAdapter를 사용할 수 없습니다.

fweigl

의 닫기 아이콘을 클릭 할 때 사용자 지정 BindingAdapter작성했습니다 .

@BindingAdapter("onCloseClicked")
fun Chip.onCloseClicked(onCloseClicked: () -> Unit) {
    setOnCloseIconClickListener { onCloseClicked() }
}

다음과 같이 내 레이아웃에 바인딩합니다.

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <data>

        <variable
            name="viewModel"
            type="com.example.playground.MyViewModel" />

    </data>

    <LinearLayout 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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">

            <com.google.android.material.chip.Chip
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="chip 1"
                app:closeIconEnabled="true"
                app:onCloseClicked="@{() -> viewModel.chip1CloseClicked()}" />

            <com.google.android.material.chip.Chip
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="chip 2"
                app:closeIconEnabled="true" />

    </LinearLayout>
</layout>

위와 같이 1 개의 칩만 바인딩하면 모두 정상적으로 작동합니다. 두 번째 칩도 다음과 같이 바인딩 할 때 :

        <com.google.android.material.chip.Chip
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="chip 2"
            app:closeIconEnabled="true"
            app:onCloseClicked="@{() -> viewModel.chip2CloseClicked()}" />

데이터 바인딩 오류로 인해 앱이 더 이상 빌드되지 않습니다.

com / example / playground / databinding / ActivityMainBindingImpl.java
오류 : 반환 문 누락

이것이 발생하는 이유와 해결 방법에 대한 아이디어가 있습니까?

추신 : https://github.com/fmweigl/ChipDatabinding 에서 직접 시도해 볼 수 있습니다.

ConstOrVar

그 문제는 이미 그 질문 에서 논의되었습니다 -데이터 바인딩 컴파일러는 유효하지 않은 자바 코드를 생성합니다 :

// Listener Stub Implementations
// callback impls
public final kotlin.Unit _internalCallbackInvoke(int sourceId ) {
    switch(sourceId) {
        case 1: {
            // localize variables for thread safety
            // viewModel
            com.example.playground.MyViewModel viewModel = mViewModel;
            // viewModel != null
            boolean viewModelJavaLangObjectNull = false;



            viewModelJavaLangObjectNull = (viewModel) != (null);
            if (viewModelJavaLangObjectNull) {


                viewModel.chip1CloseClicked();
            }
            return null;
        }
        case 2: {
            // localize variables for thread safety
            // viewModel
            com.example.playground.MyViewModel viewModel = mViewModel;
            // viewModel != null
            boolean viewModelJavaLangObjectNull = false;



            viewModelJavaLangObjectNull = (viewModel) != (null);
            if (viewModelJavaLangObjectNull) {


                viewModel.chip2CloseClicked();
            }
            return null;
        }
    }
}

여기 defaultreturn문이있는 분기 가 없습니다.

이를 해결하기 위해 귀하의 경우 @BindingAdapter주석으로 표시된 기능의 서명 을 다음으로 변경할 수 있습니다.

@BindingAdapter("onCloseClicked")
fun Chip.onCloseClicked(clickListener: View.OnClickListener?) {
    setOnCloseIconClickListener(clickListener)
}

변경 사항이 적용되면 프로젝트가 성공적으로 컴파일됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 개의 다른 뷰 컨트롤러에 동일한 뷰를 추가 할 수 있습니까?

분류에서Dev

ChakraUI에서 useDisclosure ()를 사용하여 동일한 페이지에서 두 개의 모달을 사용할 수 없습니다.

분류에서Dev

PHP는 ajax를 사용하여 두 개의 매개 변수를 다른 PHP에 전달할 수 없습니다.

분류에서Dev

두 개의 버튼에 동일한 외부 js 파일을 사용할 수 없습니다 (다른보기에서).

분류에서Dev

두 개의 다른 자바 스크립트 블록에서 동일한 변수를 사용할 수 있습니까?

분류에서Dev

커밋 기록이 다른 두 개의 다른 원격 (개인 및 공용)에서 동일한 git 프로젝트를 유지할 수 있습니까?

분류에서Dev

Github 데스크톱 : 두 명의 다른 사람이 두 개의 다른 계정으로 동일한 컴퓨터를 사용할 수 있습니다.

분류에서Dev

한 테이블에 두 개의 외래 키를 사용하여 다른 열의 동일한 열을 참조 할 수 있습니까?

분류에서Dev

Elasticsearch에서 두 개 이상의 필터를 사용할 수 없습니다.

분류에서Dev

DDWRT : 두 개의 다른 Mac 주소에 대해 동일한 IP를 정의 할 수 있습니까?

분류에서Dev

동일한 유형의 두 개체를 비교할 수 없습니다.

분류에서Dev

동일한 CGMutablePathRef에 두 개의 CGPathAddArc를 만들 수 없습니다.

분류에서Dev

두 개의 다른 앱에서 동일한 릴리스를 사용할 수있는 경우 연속 내보내기는 어떻게 작동합니까?

분류에서Dev

두 개의 동일한 개체를 시전하는 동안 개체를 시전 할 수 없습니다.

분류에서Dev

Nexus 5에서 두 개의 MediaPlayer를 동시에 재생할 수 없습니다.

분류에서Dev

다른 개체에서 CallVoidMethod를 사용할 수 없습니다.

분류에서Dev

한 번에 두 개의 다른 배열에 foreach ()를 사용할 수 있습니까?

분류에서Dev

두 개의 네트워크 인터페이스를 동시에 사용할 수 없습니다.

분류에서Dev

2 개의 다른 앱이 동일한 카메라를 동시에 사용할 수 있습니까?

분류에서Dev

MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

분류에서Dev

AngularJS를 사용하여 동일한 뷰의 요소에 액세스 할 수 없습니다.

분류에서Dev

C #의 두 가지 다른 클래스에서 동일한 열거 형을 사용할 수 있습니까?

분류에서Dev

동일한보기에서 하나의 모델 속성에 대해 두 개의 kendoui 드롭 다운을 사용할 수 없습니다.

분류에서Dev

두 개의 다른 응용 프로그램에 출력을 지정하는 동안 두 개의 키보드를 동시에 사용할 수 있습니까?

분류에서Dev

다른 유형의 동일한 뷰에서 동일한 모델을 두 번 사용하고 싶습니까?

분류에서Dev

동일한 부모 노드에서 다른 접두사로 하위 노드를 만들 수 없습니다.

분류에서Dev

NSInteger는 동일한 곱셈에서 두 번 사용할 수 없습니다.

분류에서Dev

동일한 컴퓨터에서 두 개의 다른 OS간에 파일을 공유 할 수 있습니까?

분류에서Dev

동시에 두 개의 정수를 요청할 수 없습니다.

Related 관련 기사

  1. 1

    두 개의 다른 뷰 컨트롤러에 동일한 뷰를 추가 할 수 있습니까?

  2. 2

    ChakraUI에서 useDisclosure ()를 사용하여 동일한 페이지에서 두 개의 모달을 사용할 수 없습니다.

  3. 3

    PHP는 ajax를 사용하여 두 개의 매개 변수를 다른 PHP에 전달할 수 없습니다.

  4. 4

    두 개의 버튼에 동일한 외부 js 파일을 사용할 수 없습니다 (다른보기에서).

  5. 5

    두 개의 다른 자바 스크립트 블록에서 동일한 변수를 사용할 수 있습니까?

  6. 6

    커밋 기록이 다른 두 개의 다른 원격 (개인 및 공용)에서 동일한 git 프로젝트를 유지할 수 있습니까?

  7. 7

    Github 데스크톱 : 두 명의 다른 사람이 두 개의 다른 계정으로 동일한 컴퓨터를 사용할 수 있습니다.

  8. 8

    한 테이블에 두 개의 외래 키를 사용하여 다른 열의 동일한 열을 참조 할 수 있습니까?

  9. 9

    Elasticsearch에서 두 개 이상의 필터를 사용할 수 없습니다.

  10. 10

    DDWRT : 두 개의 다른 Mac 주소에 대해 동일한 IP를 정의 할 수 있습니까?

  11. 11

    동일한 유형의 두 개체를 비교할 수 없습니다.

  12. 12

    동일한 CGMutablePathRef에 두 개의 CGPathAddArc를 만들 수 없습니다.

  13. 13

    두 개의 다른 앱에서 동일한 릴리스를 사용할 수있는 경우 연속 내보내기는 어떻게 작동합니까?

  14. 14

    두 개의 동일한 개체를 시전하는 동안 개체를 시전 할 수 없습니다.

  15. 15

    Nexus 5에서 두 개의 MediaPlayer를 동시에 재생할 수 없습니다.

  16. 16

    다른 개체에서 CallVoidMethod를 사용할 수 없습니다.

  17. 17

    한 번에 두 개의 다른 배열에 foreach ()를 사용할 수 있습니까?

  18. 18

    두 개의 네트워크 인터페이스를 동시에 사용할 수 없습니다.

  19. 19

    2 개의 다른 앱이 동일한 카메라를 동시에 사용할 수 있습니까?

  20. 20

    MySQL은 여러 테이블을 사용하여 서로 다른 조건에서 동일한 데이터의 두 가지 다른 개수를 생성합니다.

  21. 21

    AngularJS를 사용하여 동일한 뷰의 요소에 액세스 할 수 없습니다.

  22. 22

    C #의 두 가지 다른 클래스에서 동일한 열거 형을 사용할 수 있습니까?

  23. 23

    동일한보기에서 하나의 모델 속성에 대해 두 개의 kendoui 드롭 다운을 사용할 수 없습니다.

  24. 24

    두 개의 다른 응용 프로그램에 출력을 지정하는 동안 두 개의 키보드를 동시에 사용할 수 있습니까?

  25. 25

    다른 유형의 동일한 뷰에서 동일한 모델을 두 번 사용하고 싶습니까?

  26. 26

    동일한 부모 노드에서 다른 접두사로 하위 노드를 만들 수 없습니다.

  27. 27

    NSInteger는 동일한 곱셈에서 두 번 사용할 수 없습니다.

  28. 28

    동일한 컴퓨터에서 두 개의 다른 OS간에 파일을 공유 할 수 있습니까?

  29. 29

    동시에 두 개의 정수를 요청할 수 없습니다.

뜨겁다태그

보관