findViewById 를 매번 사용하기보단 편하게 view와 code를 이어주기 위한 도구.

Kotlin android extensions 사용이 간편했기에 많이 사용하였지만, app의 크기가 커지면서 view가 많아지고 같은 id가 사용되는 경우가 생기면서 실수하기 쉬운 요소가 되었다. 이를 해결하기 위해서 간편하게 사용하면서도 바인딩 하려는 layout을 명시적으로 사용하여 실수를 최소화하기 위해 고안된 것이 Binder 이다.

 

//gradle(module)에 binding 요소를 추가한다. android {         ...         viewBinding {             enabled = true         } }  // lateinit으로 변수명을 선언한다. private lateinit var binding: <ActivityNameBinding>   override fun onCreate(savedInstanceState: Bundle?) { 	super.onCreate(savedInstanceState)  	// lateinit으로 선언된 변수 binding에 매치시킨다. 	binding = ActivityNameBinding.inflate(layoutInflater)  	//contentView에 등록시킨다. 	val view = binding.root   setContentView(view)  	//view component의 id로 접근이 가능해진다. 	binding.<ViewCompont_id> } 

단, Activity가 아닌 Fragment에서는 사용법 차이가 있다. 특히 Nullable 처리를 별도로 필요로 한다.

fragment가 해제 될때 binding도 해제해준다.

private var _binding: GuideFragmentBinding? = null private val binding get() = _binding!!  override fun onCreateView(         inflater: LayoutInflater,         container: ViewGroup?,         savedInstanceState: Bundle?     ): View? {         _binding = GuideFragmentBinding.inflate(inflater,container,false)         val view = binding.root          return view }  override fun onDestroyView() {     super.onDestroyView() 		_binding = null } 

레이아웃을 xml에 선언해 놓은 것이 아니라 코드상 include해서 사용하는 경우, 아래와 같이 subView 필드로 접근한다.

// include된 layout에 접근할 경우. binding.subView.<viewComponent_id>

'Android > Android기본' 카테고리의 다른 글

Fragment  (0) 2021.11.24
Resource  (0) 2021.11.24
Context  (0) 2021.11.24
Thread  (0) 2021.11.24
Permission  (0) 2021.11.24

+ Recent posts