Sử dụng FragmentContainerView với thành phần Điều hướng?


38

Sau khi cập nhật lên Điều hướng 2.2.0-beta01 từ phiên bản trước, lint đưa ra cảnh báo về việc thay thế <fragment>thẻ bằng FragmentContainerView.

Tuy nhiên, việc thay thế thẻ một mình dường như ngăn không cho biểu đồ điều hướng bị thổi phồng.

Theo 2.2.0-alpha01 , FragmentContainerViewđược sử dụng nội bộ. Chúng ta có nên bỏ qua cảnh báo lint?


Activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Lint warning: "Replace the <fragment> tag with FragmentContainerView. -->
    <fragment
        android:id="@+id/nav_host_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph_main"/>

    <!-- other elements -->

</androidx.constraintlayout.widget.ConstraintLayout>

3
Lợi thế của việc sử dụng là FragmentContainerViewgì?
IgorGanapolsky

@IgorGanapolsky Xem tài liệu chính thức: developer.android.com/reference/androidx/fragment/app/
mẹo

@EugenPechanec Tại sao chúng ta cần điều đó khi có Jetpack Navigation?
IgorGanapolsky

@IgorGanapolsky Câu hỏi hay, Jetpack Navigation điều hướng giữa các mảnh. Các đoạn chuyển tiếp (hoạt hình nhập / thoát) hoạt động khác nhau khi các đoạn nằm trong FragmentContainerViewvà trong bất kỳ bố trí vùng chứa nào khác. Sự khác biệt được mô tả trong tài liệu FCV được liên kết ở trên. Về cơ bản, FCV được cho là làm cho quá trình chuyển đổi hoạt động nhiều hơn bạn mong đợi. Hoặc, Jetpack Navigation phụ thuộc vào các mảnh vỡ. Nếu Fragment bị hỏng, bạn sẽ nhận được thư viện Fragment cố định mới hoặc chờ phiên bản Điều hướng mới phụ thuộc vào Fragment cố định mới.
Eugen Pechanec

@EugenPechanec Tôi hiểu những gì bạn đang nói. Tuy nhiên, tôi nghĩ rằng thật phiền toái cho các nhà phát triển để theo kịp hai API khác nhau, khi Google rõ ràng ủng hộ Jetpack Navigation độc quyền ...
IgorGanapolsky

Câu trả lời:


13

Quan trọng! Có những vấn đề được biết đến với các phiên bản khác nhau của FragmentContainerView. Xem các thay đổi trước khi sử dụng. Đọc qua các bản sửa lỗi và sử dụng một phiên bản gần đây của thư viện.


Hiện tại, bạn cũng nên khai báo sự phụ thuộc vào Fragment 1.2.0-beta02 vì nó bao gồm một bản sửa lỗi cho trường hợp sử dụng này.

implementation "androidx.fragment:fragment:1.2.0-beta02"

Phiên bản 1.2.0-beta02

Ngày 11 tháng 10 năm 2019

Sửa lỗi

Đã khắc phục sự cố trong đó Fragment onInflate()không nhận được các thuộc tính phù hợp từ đó FragmentContainerView, phá vỡ các trường hợp như NavHostFragment. ( b / 142421837 )

Nguồn: https://developer.android.com/jetpack/androidx/release/fragment#1.2.0-beta02


6
Giải pháp này không hiệu quả với tôi.
lộng lẫy

@glend Vui lòng chuẩn bị một dự án tối thiểu tái tạo vấn đề và báo cáo về trình theo dõi vấn đề chính thức . Cảm ơn!
Eugen Pechanec

11

Các NavigationBasicSample đã được cập nhật 2.2.0-alpha01 nhưng vẫn sử dụng fragmentthẻ. Các NavigationAdvancedSample cho thấy việc sử dụng FragmentContainerView, nhưng đồ thị nav được bơm căng trong các mã (họ có đồ thị khác nhau) và mảnh máy chủ tương ứng sẽ được thêm vào FragmentContainerView. Vì vậy, tôi muốn nói rằng tại thời điểm này, chúng ta nên bỏ qua cảnh báo nếu chúng ta muốn lạm phát tự động.


Tôi nhận thấy điều này là tốt trong các mẫu. Có vẻ như việc thêm Fragmentphụ thuộc mới nhất sẽ quan tâm đến cảnh báo xơ xác.
gầnSane

Tại sao chúng ta cần FragmentContainerView?
IgorGanapolsky

Tôi đã kiểm tra mã trong AdvancedSample. Nó chỉ làm tôi nôn mửa! Tôi không biết tại sao Đội tại google phải tạo và phá vỡ mọi thứ theo cách khó xử như vậy. Bây giờ tôi có thể phải sao chép chức năng mở rộng Hôm nay nhưng điều này có thể lại phá vỡ Ngày mai với một số cập nhật trong thư viện điều hướng. Nó chỉ hút !!
sud007
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.