Android Fragment Lifecycle: onViewCreated(…) không phải lúc nào cũng được gọi. Không dùng XML có ưu, nhược điểm gì?

Hầu hết mọi người sử dụng Fragment đều quen với việc tạo UI bằng cách inflate file XML trong onCreateView(…). Với cách này thì Lifecycle của Fragment chạy đúng như những gì chúng ta biết. Nhưng nếu chúng ta không làm theo "kiểu truyền thống" thì sao? Hãy xem bài viết của mình nhé 🤗 !

1. Tạo UI cho Fragment không dùng XML

Bạn xem qua đoạn code dưới, mình không dùng XML: Mọi người thấy mình đang code wrapper camera chứ, và mình không cần dùng XML trong onCreateView(…)như thường lệ. Mình tạo view bằng code. Mọi thứ vẫn chạy bình thường, camera của mình vẫn hoạt động bình thường. Nhưng mà ở trong onCreaView(..) mình đang return super.onCreateView(…) do vậy onViewCreated(..) sẽ không được gọi đâu nha. Bạn return null thì onViewCreated(..) cũng không được gọi.

Còn nếu không dùng XML mà vẫn muốn onViewCreated(..)được gọi thì sao? Thì bạn sẽ làm như thế này: Thấy đó, mình khởi tạo viewGroup bằng code, rồi add các view children vào. Sau đó return viewGroup. Như thế này thì onViewCreated(..) vẫn được gọi bình thường nha 😀 .

2. Không dùng XML có ưu, nhược điểm gì?

Các bạn biết đấy, file .apk gồm tập hợp file .dex, AndroidManifest.xml, folder res và 1 số thành phần khác được nén lại. Bạn làm cách không dùng XML cho Fragment như thế này thì sẽ tiết kiệm được vài KB ở trong folder res 😅 -> giảm được size .apk.

Và về bản chất khi bạn dùng file XML truyền vào cho thằng inflater ý, thì thằng inflater nó sẽ phân tích file XML này từ các markup(ImageView, ListView,..), các attribute(android:layout_width, android:layout_height,..) rồi nó tạo view cho bạn vẫn bằng java mà thôi, xong nó sẽ return cho bạn cái view, để rồi bạn lại return cho thằng onCreateView(..): View?. Nghĩa là bạn tạo view bằng code thì tốc độ sẽ nhanh hơn bạn dùng XML. Nhưng trong thực tế thì chúng ta cứ dùng XML thôi, vì sự chênh lệch đó là không đáng kể, chứ những layout/viewgroup phức tạp mà tạo view bằng code thì mất thời gian lắm, dễ nhầm nữa 😅 .

Bài viết của mình xin được kết thúc tại đây, hẹn gặp lại các bạn trong những bài viết sắp tới 🍺 🍻 !