DataBinding으로 바인드한 변수를 include 태그로 읽어들이는 다른 레이아웃으로 이용하고 싶다

실현하고 싶은 것





등장 파일
  • MainActivity.kt
  • MainViewModel.kt
  • activity_main.xml
  • contents_main.xml

  • Activity( MainActivity.kt )의 레이아웃 파일( activity_main.xml )에 include 태그로 다른 레이아웃 파일( contents_main.xml )을 읽는 경우에 DataBinding 를 사용하여 MainActivity.kt <=> MainViewModel.kt 데이터를 contents_main.xml에서 사용하고 싶습니다.

    해결책



    contents_main.xml에 정의 된 변수를 activity_main.xml의 include 태그 내에서 전달



    contents_main.xml
    <layout>
        <data>
            <variable
                name="foo"
                type="String"/>  
        </data></layout>
    

    위와 같이 contents_main.xml 에 변수( foo )를 정의한다.

    activity_main.xml
    <layout><data>
            <variable
                name="vm"
                type="com.example.MainViewModel" />
        </data>
    
        <FrameLayout><include
                android:id="@+id/contents"
                layout="@layout/contents_main"
                app:foo="@{vm.hoge}" /> /* ←ココ */ 
    
        </FrameLayout>
    </layout>
    

    위와 같이, contents_main.xml 로 정의한 변수( foo )에, MainActivity.kt <=> MainViewModel.kt間 로 바인드 한 클래스를 이용해 값을 include 태그의 속성에 세트(말하는 법을 모르는) .

    contents_main.xml
    <layout>
        <data>
            <variable
                name="foo"
                type="String"/>  
        </data>
    
      <TextView
            
            android:text="@{foo}" /></layout>
    

    이제 위와 같이 contents_main.xml 에서 사용할 수 있게 되었습니다!

    참고



    Data Binding Library
    DataBinding의 이것

    좋은 웹페이지 즐겨찾기