오늘은 데이터바인딩의 기초이다.
dataBinding{
enable = true
}
gradle에서 dataBinding을 추가해준다.
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설정을 해주기 위해서 추가해준다.
<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이다.
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설정을 버튼이 클릭되면 텍스트가 안보이고 보여지게 만들어준다.
지금당장은 효율이 떨어져보이지만 리사이클러뷰? 같은곳에 적용하면 편해진다고 한다.