【Android】ViewBinding

MYEONGEUN KWON·2022년 11월 30일
0

안드로이드

목록 보기
2/6
post-thumbnail

만약 어떤 버튼을 비활성화 시키고 싶다면 어떻게 하면 좋을까?
버튼의 뷰는 layout(xml 파일)에 있고 비활성화 기능은 액티비티(Kotlin 또는 Java 파일)에 정의할 것이다.
여기서 처음 봉착하는 문제는 어떻게 뷰를 액티비티로 가져올 것인가? 일 것이다.
가장 단순한 방법으로는 findViewById를 이용해 버튼을 생성할 때 정의한 id로 버튼을 불러오는 것이다.

class MainActivity : AppCompatActivity() {
    //중략
    buttonView = findViewById(R.id.button)
}

현재는 버튼 하나를 가져와서 간단해 보이지만 만약 필요한 버튼이 100개라면 어떨까?
그럼 위의 findViewById를 이용해서 100개의 버튼을 일일이 가져와야 할 것이다.
이런 슬픈 코딩을 해야 하는 안드로이드 개발자를 가엽게 여긴 건지 3.6 버전 이후에는 이를 대체할 수 있는 view binding이 나오게 된다.
view binding을 사용하면 뷰 하나하나를 직접 가져오는 이러한 작업 없이 한 번에 모든 뷰가 들어있는 binding object를 생성해준다.


사용법

1.gradle 추가

  • 안드로이드 스튜디오 버전 4.0 이상
android {
    buildFeatures {
        viewBinding = true
    }
}
  • 안드로이드 스튜디오 버전 3.6 ~ 4.0
android {
    viewBinding {
        enabled = true
    }
}

2. Activity

class MainActivity : AppCompatActivity() {
//XXXActivity의 Binding Class 이름은 ActivityXXXBinding
    private lateinit var binding: ActivityMainBinding
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        // 버튼 비활성화, 여기서 button은 버튼의 id이다
        binding.button.isEnabled = false
        
    }
}

3. Fragment

 
class HomeFragment : Fragment() {

    //XXXFragment의 Binding Class 이름은 FragmentXXXBinding
    private var _binding: FragmentHomeBinding? = null
    private val binding get() = _binding!!
    
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }
    
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // 버튼 비활성화, 여기서 button은 버튼의 id이다
        binding.button.isEnabled = false
    }
}
profile
Hello, World!

0개의 댓글