簡體   English   中英

Android 導航組件在彈出回棧時執行一個動作

[英]Android navigation component perform an Action when popping backstack

我使用的是 android 導航組件,盡管早期出現了一些問題,但它現在運行良好。

我堅持一個活動許多片段設計原則,我正在使用共享視圖模型在片段之間進行通信。

我現在在我的應用程序中有一個場景,用戶創建一些東西,保存它,然后返回到主列表片段(想像添加一個新的聯系人,除了它涉及的不僅僅是在一些框中輸入更多)

當用戶保存信息時,我需要從我的視圖模型中清除數據(這是出於安全考慮而不是性能),因為它們是共享視圖模型,因此與活動生命周期而不是片段相關聯,所以它們不會清除自己,我可以在正常流程中實現這一點,只需將數據設置為 null 並調用 navcontroller.popBackStack() 但是如果用戶自己按下我無法知道因此無法清除這些視圖模型,有什么想法嗎?

您可以實現一個偵聽器接口(例如 OnBackPressedListener)並在您各自的片段中使用它以在按下后退按鈕(或向上導航)時采取行動。 該界面將成為您的片段和活動之間的橋梁。

執行此操作的正確方法我認為當時不可用,但您應該將視圖模型的范圍限定為導航圖,這樣系統會清除數據並且您只處理導航,快速示例:

private ViewModelStoreOwner getStoreOwner() {
        NavController navController = Navigation
                .findNavController(requireActivity(), R.id.root_navigator_fragment);
        return navController.getViewModelStoreOwner(R.id.root_navigator);        
}


private void setUpSearchViewModel() {
    searchViewModel = new ViewModelProvider(getStoreOwner()).get(SearchViewModel.class);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM