目前我的應用程式有一個帶有兩個片段的活動,一個是HomeFragment,另一個是SearchFragment。我正在使用片段導航在片段之間導航。
在 中SearchFragment,我要求用戶提供他/她想要搜索的值。完成后,我希望應用程式導航回HomeFragment并執行搜索。為此,我創建了一個介面并在SearchFragment呼叫中構建了一個方法addListener()來設定該偵聽器。
不要從 HomeFragment 導航到 SearchFragment 我正在使用以下行:
findNavController().navigate(R.id.action_home_to_search_fragment, bundle)
這使我無法選擇呼叫 SearchFragment 的方法,因為我沒有這樣的實體。這里有人可以幫我解決這個問題嗎?
如何獲取實體或呼叫方法,這將是一個很大的幫助。
謝謝
uj5u.com熱心網友回復:
由于您使用的是 Navigation 庫,因此您可以將查詢作為引數傳遞給HomeFragment. 為此,HomeFragment在導航圖中添加一個引數 to并使用默認值null。使用該查詢引數HomeFragment來顯示適當的資料。
在 中SearchFragment,當用戶輸入查詢并點擊搜索時,而不是回傳到HomeFragment通過navigateUp()或者popBackStack()您可以前進到HomeFragment通過操作。在從SearchFragmentto 開始時HomeFragment,請記住首先將這兩個從回傳堆疊中彈出(popUpTo為此在導航圖中使用屬性),以便最后只有HomeFragment在回傳堆疊中。
另一種方法:可能更直接的方法是使用 Fragment Result API 將資料從一個片段發送到另一個片段。您可以參考檔案以了解用法。
uj5u.com熱心網友回復:
您可以MutableLiveData在 ViewModel 或 Activity 的 LiveData 中使用和存盤資料,如下所示:
將此行添加到您的Module-levelbuild.gradle 檔案中:
dependencies {
//...
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'
}
在您的 ViewModel 中定義變數:
val searchQuery: MutableLiveData<String> = MutableLiveData()
當用戶提供值時更新資料:
viewModel.searchQuery.postValue(query)
您可以使用 homeFragment 中的值:
viewModel.searchQuery.observe(viewLifecycleOwner, { query: String ->
// Do whatever you want with query
})
uj5u.com熱心網友回復:
您還可以包括Navigation Safe Args. 然后在 nav_graph 中執行從SearchFragmentto開始的操作HomeFragment,并nav_graph為HomeFragment型別 String 和默認值null或 just設定一個引數""。
然后在發送命令中SearchFragment寫入以下內容:
val action = SearchFragmentDirection.actionSearchFragmentToHomeFragment(EditText.text.toSrting)
findNavController.navigate(action)
您接受 中的資料HomeFragment,為此您在全域范圍內創建一個 HomeFragmentArgs 實體:
private val args: HomeFragmentArgs by navArgs()
并將邏輯從 SearchFragment 轉移到 HomeFragment 并插入此引數
并將此引數(args)粘貼到您提出請求或呼叫的位置
您可以在此處了解有關 Safe Args 的更多資訊:https : //developer.android.com/guide/navigation/navigation-pass-data
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362391.html
