Menggunakan FragmentContainerView dengan komponen Navigasi?

38

Setelah memperbarui ke Navigasi 2.2.0-beta01 dari versi sebelumnya, serat memberi peringatan tentang mengganti <fragment>tag dengan FragmentContainerView.

Namun, mengganti tag saja tampaknya mencegah grafik navigasi meningkat.

Menurut 2.2.0-alpha01 , FragmentContainerViewdigunakan secara internal. Haruskah kita mengabaikan peringatan serat?


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>
hampirSane
sumber
3
Apa keuntungan menggunakan FragmentContainerView?
IgorGanapolsky
@IgorGanapolsky Lihat dokumentasi resmi: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec
@EugenPechanec Mengapa kita memerlukan itu ketika kita memiliki Navigasi Jetpack?
IgorGanapolsky
@IgorGanapolsky Pertanyaan bagus, Navigasi Jetpack menavigasi antar fragmen. Transisi fragmen (masuk / keluar animasi) berperilaku berbeda ketika fragmen berada di FragmentContainerViewdan dalam tata letak wadah lainnya. Perbedaannya dijelaskan dalam dokumentasi FCV yang ditautkan di atas. Pada dasarnya, FCV seharusnya membuat transisi berfungsi lebih seperti yang Anda harapkan. Atau, Navigasi Jetpack tergantung pada fragmen. Jika Fragmen rusak, Anda mendapatkan pustaka Fragmen baru yang diperbaiki atau menunggu versi Navigasi baru yang bergantung pada Fragmen baru yang diperbaiki.
Eugen Pechanec
@EugenPechanec Saya mengerti apa yang Anda katakan. Namun, saya pikir itu adalah gangguan bagi pengembang untuk mengikuti dua API yang berbeda, ketika Google telah secara jelas menganjurkan Navigasi Jetpack secara eksklusif ...
IgorGanapolsky

Jawaban:

13

Penting! Ada masalah yang diketahui dengan berbagai versi FragmentContainerView. Lihat changelog sebelum digunakan. Baca melalui perbaikan bug dan gunakan versi terbaru perpustakaan.


Untuk saat ini, Anda juga harus mendeklarasikan ketergantungan pada Fragment 1.2.0-beta02 karena termasuk perbaikan untuk kasus penggunaan ini.

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

Versi 1.2.0-beta02

11 Oktober 2019

Perbaikan kerusakan

Memperbaiki masalah ketika Fragment onInflate()tidak menerima atribut yang tepat dari FragmentContainerView, memecahkan kasus seperti NavHostFragment. ( b / 142421837 )

Sumber: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02

Eugen Pechanec
sumber
6
Solusi ini tidak berhasil untuk saya.
glend
@ glend Harap siapkan proyek minimal yang mereproduksi masalah dan laporkan pada pelacak masalah resmi . Terima kasih!
Eugen Pechanec
11

The NavigationBasicSample telah diperbarui untuk 2.2.0-alpha01 tapi masih menggunakan fragmenttag. The NavigationAdvancedSample menunjukkan penggunaan FragmentContainerView, tetapi grafik nav mengembang dalam kode (mereka memiliki beberapa grafik yang berbeda) dan fragmen tuan rumah yang sesuai ditambahkan ke FragmentContainerView. Jadi saya katakan saat ini kita harus mengabaikan peringatan jika kita ingin inflasi otomatis.

dmapr
sumber
Saya perhatikan ini juga dalam sampel. Sepertinya menambahkan Fragmentketergantungan terbaru menangani peringatan serat.
AlmostSane
Mengapa kami membutuhkan FragmentContainerView?
IgorGanapolsky
Saya memeriksa kode di AdvancedSample. Itu hanya membuat saya muntah! Saya tidak tahu mengapa Team di google harus membuat dan memecahkan hal-hal dengan cara yang canggung. Sekarang saya mungkin harus menyalin fungsi ekstensi Hari ini, tetapi ini mungkin akan merusak Besok dengan beberapa pembaruan di perpustakaan navigasi. Itu hanya menyebalkan !!
sud007