`mvxformsdroidpagepresenter` ใน mvvmcross ได้รับการออกแบบมาเพื่อจัดการการนำทางสำหรับหน้า xamarin.forms ภายในแอปพลิเคชัน Android อย่างไรก็ตามเมื่อต้องรับมือกับการโทรที่ไม่ใช่รูปแบบเช่นกิจกรรมที่เกี่ยวข้องกับกิจกรรม Android พื้นเมืองมันจะเปลี่ยนเส้นทางการโทรเหล่านี้ไปยัง `mvxandroidviewpresenter ' สิ่งนี้ช่วยให้แอปพลิเคชันสามารถนำทางระหว่าง Xamarin.forms หน้าและมุมมอง Android ดั้งเดิมได้อย่างราบรื่น
นี่คือคำอธิบายโดยละเอียดว่า `mvxformsdroidpagepresenter` จัดการการโทรที่ไม่ใช่รูปแบบอย่างไร:
1. การเปลี่ยนเส้นทางการโทรแบบไม่มีรูปแบบ: เมื่อมีการร้องขอเพื่อแสดงมุมมองที่ไม่ใช่หน้า xamarin.forms (เช่นกิจกรรม Android ดั้งเดิม), `mvxformsDroidPagePresenter` redirects คำขอนี้ไปยัง` mvxandroidviewpresenter ผู้นำเสนอนี้มีหน้าที่รับผิดชอบในการจัดการตรรกะการนำเสนอสำหรับมุมมอง Android พื้นเมือง
2. การใช้งาน: เพื่อให้บรรลุการเปลี่ยนเส้นทางนี้คุณต้องสร้างผู้นำเสนอที่กำหนดเองที่ขยาย `mvxformsdroidpagepresenter` ในผู้นำเสนอที่กำหนดเองนี้คุณสามารถแทนที่เมธอด `show` เพื่อตรวจสอบว่าคำขอโมเดลมุมมองนั้นมีไว้สำหรับมุมมอง Xamarin.forms หรือมุมมอง Android ดั้งเดิมหรือไม่ หากเป็นมุมมองดั้งเดิมคุณสามารถใช้ `mvxandroidviewpresenter` เพื่อจัดการกับงานนำเสนอ
3. อินเตอร์เฟส ViewModel: วิธีหนึ่งในการแยกความแตกต่างระหว่าง Xamarin.Forms และ Native Android View Model คือการกำหนดอินเทอร์เฟซเช่น `IXFViewModel` ที่นำไปใช้โดยรุ่น Xamarin.Forms ทั้งหมด ในผู้นำเสนอที่กำหนดเองของคุณคุณสามารถตรวจสอบว่าโมเดลมุมมองใช้อินเทอร์เฟซนี้หรือไม่ ถ้าเป็นเช่นนั้นคุณจะจัดการเป็นมุมมองแบบฟอร์ม มิฉะนั้นคุณใช้ `mvxandroidviewpresenter`
4. การลงทะเบียน: ในการใช้ผู้นำเสนอที่กำหนดเองของคุณคุณต้องแทนที่เมธอด `createViewPresenter` ในคลาสการตั้งค่า MVVMcross ของคุณ วิธีนี้ควรส่งคืนอินสแตนซ์ของผู้นำเสนอที่กำหนดเองของคุณเพื่อให้มั่นใจว่าใช้สำหรับงานนำเสนอมุมมองทั้งหมด
5. การจัดการวงจรชีวิต: สำหรับมุมมอง Android ดั้งเดิมคุณต้องจัดการวงจรชีวิตของกิจกรรมโดยการใช้ `imvxandroidcurrenttopactivity` และ` imvxandroidactivityLifetimelistener` สิ่งนี้ทำให้มั่นใจได้ว่า MVVMcross ตระหนักถึงกิจกรรมยอดนิยมในปัจจุบันและสามารถจัดการเหตุการณ์การนำทางและวงจรชีวิตได้อย่างเหมาะสม
โดยทำตามขั้นตอนเหล่านี้คุณสามารถจัดการทั้ง xamarin.forms และมุมมอง Android ดั้งเดิมภายในแอปพลิเคชันเดียวกันโดยใช้ MVVMcross
การอ้างอิง:[1] https://stackoverflow.com/questions/35912706/mvvmcross-hybrid-xamarin-forms-and-android-active-application
[2] https://stackoverflow.com/questions/36599398/mvvmcross-with-xamarin-forms-and-masterdetail
[3] https://github.com/mvvmcross/mvvmcross/issues/2802
[4] https://support.microsoft.com/en-us/office/create-a-form-that-contains-a-subform-a-one-o-many-form-df3822f-8aba-49cb-831a-1e74d6f5f06b
[5] https://michaelridland.com/xamarin/mixing-xamarin-forms-mvvmcross-nativeviews/
[6] https://xamarin97.rssing.com/chan-50656755/article24666.html
[7] https://xamarin91.rssing.com/chan-50628054/all_p539.html
[8] https://www.googlecloudcommunity.com/gc/appsheet-q-a/system-doesn-t-generate-detail-and-form-view-for-my-table-view/m-p/527393
[9] https://stackoverflow.com/questions/38181508/login-page-with-xamarin-mvvmcross-forms-preventing-back-navigation-ondroid
[10] https://help.smartsuite.com/en/articles/6267415-form-view
[11] https://www.mvvmcross.com/documentation/platform/xamarin.forms/xamarin-forms-view-presenter
[12] https://ridland2.rssing.com/chan-57660607/all_p1.html