คำถามติดแท็ก android-architecture-navigation

30
IllegalArgumentException: การนำทาง xxx ไม่รู้จักกับ NavController นี้
ฉันมีปัญหากับองค์ประกอบสถาปัตยกรรมการนำทาง Android ใหม่เมื่อฉันพยายามนำทางจากส่วนหนึ่งไปยังอีกส่วนหนึ่งฉันได้รับข้อผิดพลาดแปลก ๆ นี้: java.lang.IllegalArgumentException: navigation destination XXX is unknown to this NavController การนำทางอื่น ๆ ทั้งหมดทำงานได้ดียกเว้นอันนี้โดยเฉพาะ ฉันใช้findNavController()ฟังก์ชันของ Fragment เพื่อเข้าถึงไฟล์NavController. ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม.

12
วิธีล้างแถบการนำทางหลังจากนำทางไปยังส่วนอื่นใน Android
ฉันใช้ส่วนประกอบสถาปัตยกรรมการนำทางใหม่ใน Android และฉันติดอยู่ในการล้างสแต็กการนำทางหลังจากย้ายไปยังส่วนใหม่ ตัวอย่าง: ฉันอยู่ใน loginFragment และฉันต้องการให้ส่วนนี้ถูกล้างออกจากสแต็กเมื่อฉันไปที่โฮมแฟรกเมนต์เพื่อไม่ให้ผู้ใช้กลับไปที่ loginFragment เมื่อเขากดปุ่มย้อนกลับ ฉันใช้NavHostFragment.findNavController (Fragment) .navigate (R.id.homeFragment) อย่างง่ายเพื่อนำทาง รหัสปัจจุบัน: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); ฉันลองใช้NavOptionsในการนำทาง ()แต่ปุ่มย้อนกลับยังคงส่งฉันกลับไปที่ loginFragment NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions …

1
Navigation Arch Component สร้างการรั่วไหลของหน่วยความจำบวกที่ผิดพลาดหรือไม่
ฉันมีความรู้พื้นฐานเกี่ยวกับการรั่วไหลของหน่วยความจำและสิ่งที่สามารถทำให้พวกเขา นั่นเป็นเหตุผลที่ฉันไม่เข้าใจถ้าฉันมีปัญหาในรหัสของฉันหรือมันเป็นบวกที่ผิดพลาด ฉันไม่ทราบว่าฉันควรแบ่งปันรหัสส่วนใดเนื่องจากโครงการไม่เล็ก แต่เพียงแค่แจ้งให้เราทราบในความคิดเห็นและฉันจะเพิ่มรหัสที่จำเป็น ฉันใช้คอมโพเนนต์ arch navigation และทำตามรูปแบบ MVVM ฉันเพิ่มห้องสมุด LeakCanary ในภายหลังในการพัฒนาโครงการและมันก็เริ่มให้คำเตือนเกี่ยวกับอินสแตนซ์ที่เก็บไว้ทันทีเมื่อฉันนำทางระหว่างหน้าจอ ปัญหาเกิดขึ้นเมื่อฉันเพิ่มแฟรกเมนต์ลงในสแต็กหลัง เมื่อเพิ่มแฟรกเมนต์ที่เพิ่มลงในสแต็กหลังแต่ละตัวนับอินสแตนซ์ที่เก็บไว้จะเพิ่มขึ้น เมื่อถึงค่าขีด จำกัด 5 LeakCanary จะทิ้งฮีปและจัดทำรายงาน แต่ถ้าฉันคลิกที่ปุ่มย้อนกลับและกลับสู่หน้าจอก่อนหน้าตัวนับอินสแตนซ์ที่เก็บไว้จะลดลงและในที่สุดเมื่อกลับสู่หน้าจอที่ 1 อินสแตนซ์ที่เก็บไว้ทั้งหมดจะหายไป ถ้าฉันดูรายงานการวิเคราะห์ฮีปมันบอกว่าตัวแปร CoordinatorLayout ซึ่งเป็นการอ้างอิงถึงCoordinatorLayoutin in xml ได้รั่วไหลออกมา หากฉันลบตัวแปรและการใช้งานทั้งหมดแล้วเรียกใช้แอปอีกครั้งฉันเห็นปัญหาเดียวกัน แต่ตอนนี้มีตัวแปรอื่นที่อ้างอิงถึงมุมมองอื่นใน xml ฉันพยายามลบมุมมองทั้งหมดและการใช้งานที่ LeakCanary รายงานว่าเป็นการรั่วไหล เมื่อมันบอกว่า a TextViewซึ่งเพิ่งใช้ในการตั้งค่าข้อความonViewCreatedและไม่ได้ใช้ที่อื่นถูกรั่วฉันเริ่มสงสัยว่ามีปัญหาในรหัสของฉัน ผมวิเคราะห์วิธีวงจรสายในชิ้นส่วนและพบว่าเมื่อฉันนำทางไปยังหน้าจอใหม่สำหรับส่วนที่ก่อนหน้านี้จนถึงวิธีการทั้งหมดและรวมถึงการonDestroyViewได้รับการเรียก onDestroyแต่ไม่ เมื่อฉันคลิกย้อนกลับonDestroyถูกเรียกสำหรับแฟรกเมนต์ที่อยู่ด้านบนของสแต็กหลังและตัวนับอินสแตนซ์ที่เก็บไว้จะลดลง ฉันสงสัยว่าองค์ประกอบการนำทางจะรักษาอินสแตนซ์ของชิ้นส่วนเมื่อมันอยู่ในกองหลังและ LeakCanary เห็นว่าเป็นรอยรั่ว

1
ปัญหา ViewPager2 / แท็บกับสถานะ ViewModel
ฉันกำลังติดตามรูปแบบ MVVM - หมายถึงฉันมี ViewModel สำหรับแต่ละส่วน ฉันเพิ่มสองแท็บโดยใช้ ViewPager2 อะแดปเตอร์ของฉันมีลักษณะเช่นนี้: @Override public Fragment createFragment(int position) { switch (position) { case 0: return new MergedItemsFragment(); case 1: return new ValidatedMergedItemsFragment(); } return new MergedItemsFragment(); } แท็บกำลังทำงาน อย่างไรก็ตามฉันสังเกตเห็นว่า ViewModel ของ MergedItemsFragment ของฉันทำงานผิดปกติ ก่อนที่ฉันจะเพิ่มแท็บฉันไปที่ Fragment เช่นนี้: NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment); เมื่อฉันออกจากส่วนนั้นด้วยNavHostFragment.findNavController(this).popBackStack()และหลังจากนั้นกลับสู่ชิ้นส่วนนั้นฉันจะได้รับ ViewModel ที่ว่างเปล่าใหม่ นี่ตั้งใจไว้ return new MergedItemsFragment()ด้วยวิธีการใหม่ฉันกำลังการนำทางด้วย …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.