뷰 결합 Android Jetpack의 구성요소
뷰 결합은 뷰와 상호작용하는 코드를 더 쉽게 작성할 수 있는 기능입니다. 모듈에서 뷰 결합이 사용 설정되면 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스가 생성됩니다. 결합 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함됩니다.
대부분의 경우 뷰 결합이 findViewById를 대체합니다.
설정
뷰 결합은 모듈별로 사용 설정됩니다. 모듈에서 뷰 결합을 사용 설정하려면 다음 예와 같이 모듈 수준 build.gradle 파일에서 viewBinding 빌드 옵션을 true로 설정합니다.
Groovy
android { ... buildFeatures { viewBinding true } }
Kotlin
android { ... buildFeatures { viewBinding = true } }
바인딩 클래스를 생성하는 동안 레이아웃 파일을 무시하려면 tools:viewBindingIgnore="true" 속성을 레이아웃 파일의 루트 뷰에 추가하세요.
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
사용
모듈에 뷰 결합을 사용하도록 설정하면 모듈에 포함된 각 XML 레이아웃 파일의 결합 클래스가 생성됩니다. 각 결합 클래스에는 루트 뷰 및 ID가 있는 모든 뷰의 참조가 포함됩니다. 결합 클래스의 이름은 XML 파일의 이름을 파스칼 표기법으로 변환하고 이름 끝에 'Binding'을 추가하여 생성됩니다.
예를 들어 다음이 포함된 result_profile.xml이라는 레이아웃 파일을 생각해 보세요.
<LinearLayout ... >
<TextView android:id="@+id/name" />
<ImageView android:cropToPadding="true" />
<Button android:id="@+id/button"
android:background="@drawable/rounded_button" />
</LinearLayout>
생성된 결합 클래스 이름은 ResultProfileBinding이 됩니다. 이 클래스에는 name이라는 TextView와 button이라는 Button 등 두 필드가 있습니다. 레이아웃의 ImageView에는 ID가 없으므로 바인딩 클래스에 참조가 없습니다.
또한 모든 결합 클래스에는 상응하는 레이아웃 파일의 루트 뷰에 관한 직접 참조를 제공하는 getRoot() 메서드가 포함됩니다. 이 예에서는 ResultProfileBinding 클래스의 getRoot() 메서드가 LinearLayout 루트 뷰를 반환합니다.
다음 섹션에서는 생성된 결합 클래스를 활동 및 프래그먼트에서 사용하는 방법을 보여줍니다.
활동에서 뷰 결합 사용
활동에 사용할 결합 클래스 인스턴스를 설정하려면 활동의 onCreate() 메서드에서 다음 단계를 따르세요.
- 생성된 결합 클래스에 포함된 정적
inflate()메서드를 호출합니다. 그러면 활동에서 사용할 결합 클래스 인스턴스가 생성됩니다. getRoot()메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져옵니다.- 루트 뷰를
setContentView()에 전달하여 화면상의 활성 뷰로 만듭니다.
이러한 단계는 다음 예에 나와 있습니다.
Kotlin
private lateinit var binding: ResultProfileBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ResultProfileBinding.inflate(layoutInflater) val view = binding.root setContentView(view) }
자바
private ResultProfileBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ResultProfileBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); }
이제 결합 클래스 인스턴스를 사용하여 뷰를 참조할 수 있습니다.
Kotlin
binding.name.text = viewModel.name binding.button.setOnClickListener { viewModel.userClicked() }
자바
binding.name.setText(viewModel.getName()); binding.button.setOnClickListener(new View.OnClickListener() { viewModel.userClicked() });
프래그먼트에서 뷰 결합 사용
프래그먼트에 사용할 결합 클래스 인스턴스를 설정하려면 프래그먼트의 onCreateView() 메서드에서 다음 단계를 따르세요.
- 생성된 결합 클래스에 포함된 정적
inflate()메서드를 호출합니다. 그러면 프래그먼트에서 사용할 결합 클래스 인스턴스가 생성됩니다. getRoot()메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져옵니다.onCreateView()메서드에서 루트 뷰를 반환하여 화면상의 활성 뷰로 만듭니다.