簡體   English   中英

在父片段和子片段之間傳遞數據

[英]Passing data between Parent fragment and Child fragment

我正在為 2 個或更多片段之間的通信而苦苦掙扎

我的應用程序架構如下所示:

MainActivity (Menu Drawer) 
---->  MealsFragment
---->  ProfileFragment
---->  StatsFragment
---->  SportFragment
---->  ContactUsFragment

(通過單擊菜單抽屜 main_container 替換為選定的片段)

早些時候,我有單個活動而不是片段,但我讀過我需要將它們轉換為片段才能正確實現菜單抽屜(所以我做到了)。 問題是每個活動都有自己的子活動,它們使用 onActivityResult 與父母溝通。 現在我不知道如何處理片段。

場景是這樣的:

  1. 從 MainActivity 打開 MealsFragment (有效)
  2. 從 MealsFragment 打開 AddMealFragment(使用 MealsFragment 中的數據),填寫表格,然后將用戶提供的所有信息返回給 MealsFragment
  3. 將收到的數據用於進一步的操作

我已經看到推薦使用 settargetFragment() 和 getTargetFragment() 的帖子,但我不知道該怎么做,而且 - 更重要的是 - 我不知道之后如何接收數據

我希望您知道如何進行Fragment transactions ,即使用Fragment Manager class 從后台堆棧中添加或刪除片段。 如果您不知道,那么最好先學習一下。

現在您知道如何添加或刪除片段,在片段之間傳遞數據是一件簡單的事情,您可以在接收器片段中訪問片段的Bundle中的所有內容。 這是一個例子:

class ConversationFragment : Fragment() {
  companion object {
    const val JOB_REQUEST_ID = "jobRequestId"

    @JvmStatic
    fun newInstance(jobRequestId: String) =
      ConversationFragment().apply {
        arguments = Bundle().apply { putString(JOB_REQUEST_ID, jobRequestId) }
      }
  }
}

為了創建ConversationFragment ,我公開了一個newInstance方法, FragmentManager或任何其他實體都可以使用它來創建一個。 但是,他們需要傳遞一個JOB_REQUEST_ID才能創建一個。 我只是把這個 id 放在一個Bundle中,然后將它作為參數傳遞給片段。 在接收方(片段)上,您可以獲得此捆綁包的句柄並檢索值:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
      jobRequestId = it.getString(JOB_REQUEST_ID)
    }
  }

暫無
暫無

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

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