본문 바로가기
Android 개발/Android UI

ViewBinding 구현방법 마스터하기

by Developer88 2021. 4. 17.
반응형

오늘은 ViewBinding을 구현하는 방법을 마스터해 보겠습니다.

 

1. Dependency설정

ViewBinding을 사용하기 위해서,

app레벨의 Build.gradle에서 설정을 해 주어야 합니다.

buildFeature에 'viewBinding' 값을 'true'로  아래와 같이 설정해주면,

ViewBinding을 사용할 수 있게 됩니다.

 

 buildFeatures { viewBinding true }

 

 

 

2. Activity에서 사용하기

2-1. XML파일

이젠 Activity에서 findviewById를 대신해서 사용해 보아야 겠지요.

먼저 Activity에서 사용할 xml파일을 보도록 하겠습니다.

아래와 같이 "activity_main.xml" 파일로 되어 있습니다.

 

 

2-2. setContentView

ViewBinding을 사용하면 Binding클래스에 접근할 수 있는데요.

위와같이, activity_main.xml파일이 있다면,

CamelCase화된 이름과 뒤에 Binding을 붙여서, ActivityMainBinding이라는 클래스에 접근할 수 있게 됩니다.

 

이 클래스에 접근하여서 inflate함수로 binding객체를 얻어오구요.

이 객체의 root값을 setContentVIew의 인자로 넘겨주면 됩니다.

 

 

 

이제 어떤 요소이건, mBinding을 통해서 접근할 수 있게 되었습니다.

다만 모든 요소는 camel case로 접근할 수 있습니다.

예를 들어, id를 "text_movie_title"로 잡았다고 가정해 보겠습니다.

mBinding에서는 아래와 같이, "mBinding.textMovietitle"로 접근하게 됩니다.

 

 

그럼 아래와 같이 mBInding변수로 접근해서, "textMovieTitle"의 text를 변경해 줄 수 있습니다.

 

mBinding.textMovieTitle.text = viewModel.movieTitle
mBinding.testButton.setOnClickListener { viewModel.testClicked() }

 

 

3. Fragment에서 Binding 사용하기

그럼 이번에는 ViewBinding을 Fragment에서 사용해 보도록 하겠습니다.

onCreateView에서 binding을 아래와 같이 초기화 해 주고요.

onViewCreated에서는 binding을 사용해 주면 됩니다.

 

class BlankFragment : Fragment() {
    private lateinit var binding: FragmentBlankBinding
    
    override fun onCreateView(...): View {
        binding = FragmentBlankBinding.inflate(inflater, container, false)
        return binding.root
    }
    
    override fun onViewCreated(view: View, ...) {
        // 여기서는 이미 생성된 binding을 사용
        binding.textView.text = "Hello"
    }
}

 

 

 

4. 메뉴에 접근하기

Toolbar의 메뉴에 접근해야 할 때,

viewBinding을 사용할 경우는 어떻게 할까요?

 

아래와 같은 menu를 toolbar에서 사용한다고 가정해 보겠습니다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/test_check"
        android:title="즐겨찾기"
        app:showAsAction="always"/>

    <item
        android:id="@+id/action_more"
        android:icon="@drawable/ic_more"
        android:title="더보기"
        app:showAsAction="always"/>
</menu>

 

이럴 때, menu까지는 viewBinding으로 접근할 수 있구요.

menu안의 아이템들에는 아래와 같이 findItem을 이용해 접근할 수 있습니다.

 

binding.toolbar.menu.findItem(R.id.action_favorite)

 

찾아서 icon을 변경하고자 한다면 아래와 같이,

setIcon함수를 사용해주면 됩니다.

 

binding.toolbar.menu.findItem(R.id.action_favorite)
                    .setIcon(R.drawable.test_icon)

 

 

728x90

댓글