View binding là một tính năng cho phép bạn viết mã tương tác với dạng xem dễ dàng hơn. Khi tính năng liên kết dạng xem được kích hoạt trong một mô-đun, nó tạo ra một lớp liên kết cho mỗi tệp bố cục XML có trong mô-đun đó. Một thể hiện của lớp liên kết chứa các tham chiếu trực tiếp đến tất cả các dạng xem có ID trong bố cục tương ứng.
Trong hầu hết các trường hợp, ràng buộc chế độ xem thay thế findViewById.
Hướng dẫn cài đặt.
android {...buildFeatures {viewBinding true}}
Nếu bạn muốn tệp bố cục bị bỏ qua khi tạo các lớp liên kết, hãy thêm thuộc tính tools: viewBindingIgnore = "true" vào chế độ xem gốc của tệp bố cục đó:
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
Hướng dẫn sử dụng
<LinearLayout ... ><TextView android:id="@+id/name" /><ImageView android:cropToPadding="true" /><Button android:id="@+id/button"android:background="@drawable/rounded_button" /></LinearLayout>
Sử dụng View binding trong Activity
private ResultProfileBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ResultProfileBinding.inflate(getLayoutInflater());View view = binding.getRoot();setContentView(view);}
binding.getName().setText(viewModel.getName());binding.button.setOnClickListener(new View.OnClickListener() {viewModel.userClicked()});
Sử dung view binding trong Fragment
Để thiết lập một phiên bản của lớp liên kết để sử dụng với một phân đoạn, hãy thực hiện các bước sau trong phương thức onCreateView () của phân đoạn:
- Gọi phương thức static Inflate () có trong lớp ràng buộc đã tạo. Điều này tạo ra một thể hiện của lớp ràng buộc để phân đoạn sử dụng.
- Nhận tham chiếu đến chế độ xem gốc bằng cách gọi phương thức getRoot () hoặc sử dụng cú pháp thuộc tính Kotlin.
- Trả lại chế độ xem gốc từ phương thức onCreateView () để làm cho nó trở thành chế độ xem hiện hoạt trên màn hình.
private ResultProfileBinding binding;@Overridepublic View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {binding = ResultProfileBinding.inflate(inflater, container, false);View view = binding.getRoot();return view;}@Overridepublic void onDestroyView() {super.onDestroyView();binding = null;}
binding.getName().setText(viewModel.getName());binding.button.setOnClickListener(new View.OnClickListener() {viewModel.userClicked()});
Sự khác biệt giữa viewBinding với findviewByid
View Binding có những lợi thế quan trọng so với việc sử dụng findViewById:
- Null safety: Vì liên kết chế độ xem tạo ra các tham chiếu trực tiếp đến các chế độ xem, nên không có nguy cơ ngoại lệ con trỏ rỗng do ID chế độ xem không hợp lệ. Ngoài ra, khi một dạng xem chỉ xuất hiện trong một số cấu hình của bố cục, trường chứa tham chiếu của nó trong lớp liên kết được đánh dấu bằng @Nullable.
- Type safety: Các trường trong mỗi lớp liên kết có kiểu phù hợp với các dạng xem mà chúng tham chiếu trong tệp XML. Điều này có nghĩa là không có nguy cơ xảy ra ngoại lệ của lớp.
Những khác biệt này có nghĩa là sự không tương thích giữa bố cục và mã của bạn sẽ dẫn đến việc xây dựng của bạn không thành công tại thời điểm biên dịch thay vì trong thời gian chạy.
No comments:
Post a Comment