3

나는 DataBinding에 관한 몇 가지 기사에 따라 작동해야하는 꽤 간단한 코드를 가지고 있지만 어떤 이유 때문에 그렇지 않습니다.RuntimeException :보기 태그가 올바르지 않습니다. ViewAgendaItemBinding.bind() 메서드에 대한 null

데이터 바인딩과 함께 RecycleView를 사용하려고합니다.

class ItemViewHolder extends RecyclerView.ViewHolder{ 

    ViewAgendaItemBinding binding; 

    public ItemViewHolder(View itemView) { 
     super(itemView); 
     binding = ViewAgendaItemBinding.bind(itemView); //this is line where it's throw an error. 
    } 
} 

나는이 bind 방법의 버전을 생성 확인하고 그것의는 다음과 같습니다 아주 이상하다

public static ViewAgendaItemBinding bind(android.view.View view, android.databinding.DataBindingComponent bindingComponent) { 
     if (!"layout/view_agenda_item_0".equals(view.getTag())) { 
      throw new RuntimeException("view tag isn't correct on view:" + view.getTag()); 
     } 
     return new ViewAgendaItemBinding(bindingComponent, view); 
    } 

합니다. 왜냐하면 나는 layout/view_agenda_item_0이 없기 때문입니다. 이보기는 layout/view_agenda_item을 사용해야하며 태그는 설정하지 않아도됩니다. 그러나이 정확한 요소에 대해 태그를 설정하더라도 여전히 작동하지 않습니다.

이 문제를 해결하려면 어떻게해야합니까?

P. 그러나이 코드를 ViewAgendaItemBinding.bind(itemView)으로 변경하면 DataBindingUtils.bind(itemView)이 작동합니다. 그것은 데이터 바인딩 라이브러리에 문제가 있습니까?

답변

2

데이터 바인딩은 컴파일하는 동안 레이아웃 파일을 다시 쓰므로 자동으로 해당 태그를 추가합니다.

DataBindingUtils.bind 기존 바인딩이보기에 있는지 확인한 다음 다시 사용합니다. 해당 뷰에서 데이터 바인딩을 초기화 한 다른 위치와 비슷합니다. 우리는 같은 것을하기 위해서 ViewAgendaItemBinding.bind 메서드를 변경해야한다고 생각합니다.

+0

나는 그것을 정확히 알지 못합니다. 데이터 바인딩을 위해 어댑터를 사용하는 더미 예제이기 때문에 이것이 데이터를 바인딩하려는 단일 장소라고 확신합니다. –