데이터 바인딩

quinones·2024년 6월 20일

오늘은 데이터바인딩의 기초이다.

gradle

dataBinding{
    enable = true
}

gradle에서 dataBinding을 추가해준다.

xml

xml의 최상단 레이아웃에서 option+enter를 누르면 convert to layout~~~ 뭐라고 나오는데 이걸 눌러주면 전체코드가 레이아웃으로 감싸진다.

    <data>
        <import type="android.view.View"/>
        <variable
            name="test"
            type="com.woojin.databindingpractice.MainActivity" />
    </data>

그곳에 자동으로 data가 만들어지는데 그안에 variable로 변수를 만들어 줄 수 있다.
import는 아래에서 View를 사용해서 Visible, Gone설정을 해주기 위해서 추가해준다.

xml사용

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{test.text}"
            android:visibility="@{test.isClicked == true ? View.GONE : View.VISIBLE}" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/hideButton"
            android:text="Hide"/>

위에 data에서 만들어준 변수명인 test 그리고 그뒤에는 텍스트에 사용될 text를 넣었다. 여기서는 MainActivity에서 전역변수로 만들어준 text이다.

Activity

class MainActivity : AppCompatActivity() {

    var text = "Hello, Data Binding!"
    var isClicked = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        binding.test = this
        binding.hideButton.setOnClickListener {
            isClicked = !isClicked
            binding.invalidateAll()
        }
    }
}
}

먼저 viewBinding을 사용할때처럼 바인딩을 초기화 시켜준다.
text의 visibility설정을 버튼이 클릭되면 텍스트가 안보이고 보여지게 만들어준다.

지금당장은 효율이 떨어져보이지만 리사이클러뷰? 같은곳에 적용하면 편해진다고 한다.

profile
이우진

0개의 댓글