Home 안드로이드 ViewBinding 세팅
Post
Cancel

안드로이드 ViewBinding 세팅

안드로이드 앱 개발을 하다 보면 초반에는 당연하게 썼던 findViewById가 곧 매우 불편하다는 것을 깨닫게 될 것이다 그래서 보통은 findViewById 대신 viewBinding이나 dataBinding을 사용하는데 이번에는 이 중 viewBinding을 사용하는 법에 대해 알아보겠다

viewBinding 시작하기

viewBinding을 사용하는 법은 매우 간단한데 이번 글에서 차례 차례 소개하겠다 해당 글은 KTS 기준으로 설명하고 있다

build.gradle

우선은 build.gradle에서 설정해줘야 되는 부분이 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
plugins {
    ...
}

android {
    ...
    defaultConfig {
        ...
    }
    buildTypes {
        release {
            ...
        }
    }
    compileOptions {
        ...
    }
    viewBinding { // 이 부분 추가
        enable = true
    }
    kotlinOptions {
        ...
    }
}

dependencies {
    ...
}

앱 수준 build.gradle에 들어가면 위 코드처럼 생겼을 텐데 여기서 주석으로 표시해둔 것처럼

1
2
3
viewBinding {
    enable = true
}

해당 코드를 추가해주면 된다 이렇게 하면 viewBinding은 성공적으로 추가 되었다 그 후 viewBinding을 사용하려면 액티비티, 프래그먼트에서 세팅을 해줘야 한다

Activity 설정

우선 액티비티 설정부터 알아보면

Activity

1
2
3
4
5
6
7
8
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

이렇게 해주면 되는데 여기서 binding 타입은 해당 액티비티 이름에 따라 달라진다 위 코드에선 ActivityMainBinding로 되어있는데 만약 액티비티가 SplashActivity라면 ActivitySplashBinding가 될 것이다 그 후

onCreate에서 binding을 초기화해주고 setContentView에 binding.root를 넣어주면 된다

Fragment 설정

프래그먼트는 상대적으로 액티비티보다 복잡해보지만 막상 자세히 보면 별게 없다

Fragment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MainFragment : Fragment() {

    private var _binding: FragmentMainBinding? = null
    private val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentMainBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }

    override fun onDestroy() {
        super.onDestroy()
        _binding = null
    }

}
1
2
private var _binding: FragmentMainBinding? = null
private val binding get() = _binding!!

해당 부분 타입은 액티비티와 동일하게 이름에 맞게 해주면 되고 다음으로 onCreateView에서 _binding을 초기화 해준 뒤 binding.root를 return 해주면 된다

여기서 명심해야 할 점은 꼭

1
2
3
4
override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}

onDestroyView에서 _binding을 null로 다시 초기화 시켜줘야 한다 그렇지 않으면 메모리 누수가 발생할 수 있다

This post is licensed under CC BY 4.0 by the author.