FragmentContainerView là gì? Lợi ích của nó so với FrameLayout

Nếu bạn đang đọc bài viết này thì chắc chắn bạn là 1 dev Android và đã từng làm việc với Fragment hay FrameLayout rồi nhỉ. Nếu như bạn chưa sử dụng đến thằng FragmentContainerView thì bạn cũng dùng FrameLayout để tương tác với các Fragment rồi. Trước đây, ta sử dụng FrameLayout để chứa

Nếu bạn đang đọc bài viết này thì chắc chắn bạn là 1 dev Android và đã từng làm việc với Fragment hay FrameLayout rồi nhỉ. Nếu như bạn chưa sử dụng đến thằng FragmentContainerView thì bạn cũng dùng FrameLayout để tương tác với các Fragment rồi.

Trước đây, ta sử dụng FrameLayout để chứa các Fragment, nhưng sau này FragmentContainerView là View được Android đề xuất sử dụng thay thế cho FrameLayout.

Hai điểm chính mà FragmentContainerView đã cải thiện so với FrameLayout

  1. Các transaction của fragment được thực hiện khá dễ dàng như với FrameLayout. Bây giờ nó được xử lý bởi FragmentContainerView, nơi mà các fragment đang đi vào (entering) container sẽ nằm dưới các fragment đang đi ra (exiting) khỏi container cho đến khi nó hoàn toàn ra khỏi ngoài màn hình.
  2. Trước đây với FrameLayout, khi ta custom animation của các fragment với enter animation hoặc exit animation sẽ gặp vấn đề về thứ tự Z-index của các fragment, có lỗi UI/UX khi chạy transaction giữa các fragment.

FragmentContainerView là gì?

  • Nó là View được google đề xuất để chứa các Fragment.
  • Nó kế thừa từ FrameLayout, thêm các tính năng bổ sung.
  • Nếu thêm bất kỳ một View nào khác trong FragmentContainerView ngoài Fragment sẽ throw ngay IllegalStateException.
  • Thường được set trong xml layout của Activity.

Dùng FragmentContainerView

  • Có thể thực hiện thêm fragment vào container được dynamic như thông thường với code vì nó kế thừa từ FrameLayout
supportFragmentManager.beginTransaction().add(R.id.fragmentContainer, OneFragment::class.java,null).commit()
  • Không dùng FragmentContainerView để thay thế các ViewGroup như FrameLayout, LinearLayout v.v
  • FragmentContainerView chỉ cho phép thêm các View được trả về bởi hàm onCreateView() của Fragment, nếu không sẽ dẫn đến IllegalStateException
  • Custom animation các fragment trong FragmentContainerView:
<actionandroid:id="@+id/action_oneFragment_to_twoFragment"app:enterAnim="@android:anim/slide_in_left"app:exitAnim="@android:anim/slide_in_left"app:destination="@id/twoFragment"/>

Các thuộc tính của FragmentContainerView

<androidx.fragment.app.FragmentContainerViewandroid:id="@+id/fragmentContainerView"android:layout_width="match_parent"android:layout_height="match_parent"android:name="androidx.navigation.fragment.NavHostFragment"app:defaultNavHost="true"app:navGraph="@navigation/nav_home"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"/>
  • android:name: Tên class của việc implement NavHost.
  • app:navGraph: Liên kết với một navigation graph – chỉ định các destination mà user có thể điều hướng đến.
  • app:defaultNavHost="true": Đảm bảo cho NavHostFragment sẽ bắt chặn để xử lý nút Back của hệ thống. Chỉ có duy nhất một NavHost được đặt default.

Kết luận

FragmentContainerView là View được google đề xuất để chứa và quản lý các fragment, nên mình cứ thế mà dùng thôi 😄

Bài viết được dịch từ:

https://soni-karsh53.medium.com/what-is-fragmentcontainerview-its-benefits-over-framelayout-8abe8598fcc5

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ