IDE & Framework/Android

AAC MVVM - (2)Data binding

Greensky0026 2021. 10. 17. 20:27
반응형

앱단위 gradle 설정

//build.gradle
android{
//...
	
	dataBinding{
	        enabled = true
	    }
	}
//...
}

 

databinding을 사용할 xml을 layout으로 감싸고 data태그 추가

//xml

<layout xmlns:android="http://schemas.android.com/apk/res/android">

	<data>
        <variable
            name="user"
            type="com.example.dataBindingPractice.data.User" />
	</data>

	<LinearLayout
	...
	</LinearLayout>
</layout>

→ data 태그의 user변수는 레이아웃 내에서 사용할 수 있는 속성의 이름이고 type은 사용할 속성이다.

layout 내에서 @{} 구문을 사용해서 기록할 수 있다.

ex) @{user.firstName}

 

data binding을 사용할 수 있도록 class에 입력

//결합
ActivityMainBinding binding

@Override
protected void onCreate(Bundle saveInstanceState){
	super.onCreate(saveInstanceState);
	binding = dataBindingUtil.setContentView(this, R.layout.activity_main);
	User user = new User();
	binding.setUser(user);
}
...

bindingAdpater로 직접 레이아웃에 속성을 부여할 수도 있다.

//BindingAdapter.kt
object BindingAdapters {
	fun setVisible(view: View, isVisible: Boolean){
	        view.visibility = if (isVisible) View.VISIBLE else View.GONE
	 }
}

 

bindingAdpater 사용 예제

//MainActivity.kt

val liveVisible = MutableLiveData<Boolean>()

override fun OnCreate(saveInstanceState: Bundle){
	...
	binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
	        binding.apply {
	            lifecycleOwner = this@MainActivity
	            activity = this@MainActivity
	
	            btnChange1.setOnClickListener{
	                liveVisible.value = true
	            }
	            btnChange2.setOnClickListener {
	                liveVisible.value = false
	            }
	        }
}
//activity_main.xml
<layout...
//...
	<data>
        <variable
            name="activity"
            type="com.example.mvvmpractice.MainActivity" />
  </data>
//...
	<androidx.constraintlayout.widget.ConstraintLayout...
	//...
	<TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="내가 사라져 볼게"
            //...
            app:visible="@{activity.liveVisible}"/>
	
	<Button
            android:id="@+id/btn_change1"
		//...
	/>
  <Button
            android:id="@+id/btn_change2"
		//...
	/>

btn1을 누르면 visible이 true로, btn2를 누르면 visible이 false가 되게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형