마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

include 안에 있는 변수에 값 넣는 법 좀 알려주세요 ㅠㅠ

0 추천

공통으로 사용하게 될 xml을 만들었습니다. 이걸 a_xml이라고 하겠습니다.

이 a_xml을 include 를 사용해서 불러와서 사용하는데요. 문제는 a_xml안에 textview가 있고 거기에 데이터 바인딩으로 값을 대입하려고 합니다. 말로 하려니 어려워서 소스 첨부 합니다.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="txtTitle"
            type="java.lang.String" />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:background="@color/black"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:textColor="@color/white"
            android:text="@{txtTitle}"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

이 소스가 a_xml 입니다. 저기 보면 상단에 txtTitle이라고 변수를 string 형으로 선언하고 그걸 textView에 Text에 연결하였습니다.

 

그리고 이 xml을 include하는 곳을 보면요

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <include
        android:id="@+id/iddd"
        layout="@layout/activity_include"
        app:txtTitle='@{"닉네임 변경"}'
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

include로 불러오면서 app:txtTitle='@{"닉네임 변경"}' 이라고 값을 넣었습니다. 하지만 앱을 실행하면 글자가 나타나지 않습니다. 도대체 뭐가 문제인지 모르겠습니다. 부디 해결법을 알려주시면 감사하겠습니다.

 

그리고 해결 방법이 있다면 text 말고 drawable로 된 이미지도 하고 싶은데 아이디어 있으면 알려주시면 감사하겠습니다.

키리링 (840 포인트) 님이 2023년 3월 21일 질문

1개의 답변

0 추천
제가 데이터바인딩은 사용하지 않아서 100%  확실하지는 않지만 님이 사용하신건 데이터바인딩에서 사용하능 표현식과 변수 바인딩이 아닌 것 같은데요. 데이터 바인딩을 사용하려면 txtTitle이라는 바인딩 변수에 값을 업데이트 하셔야 하는데 그 부분도 없고, xml안에 사용하신 표현식도 신기해 보이네요. 아래 codelab을 먼저 끝내시고다시 시도해 보시죠.
 
https://developer.android.com/codelabs/android-databinding#3
spark (227,470 포인트) 님이 2023년 3월 21일 답변
spark님이 2023년 3월 21일 수정
자답이긴 한데 테스트 해보니 밑에 있는 activity_main.xml도 마찬가지로 전체를 layout으로 묶어줘야 정상적으로 데이터 바인딩이 되는거였네요. 제가 정신이 없어서 까먹어서 놓쳤네요...

이미지의 경우 a_xml에
<variable
            name="image"
            type="android.graphics.drawable.Drawable"/>

해당 변수를 추가하고 그걸 뭐 imageview에 src 같은데에 android:src="@{image}" 이렇게 넣어주고

activity_main.xml에 돌아와서 app:image='@{@drawable/png_image}' 넣어주니까 되네요.
...