簡體   English   中英

如何將三個片段的數據發送到單個活動?

[英]How to send data of three fragments to single activity?

我有一個更簡單的問題,但我無法在互聯網上找到答案。 這是交易:我有三個片段,我需要將每個片段的數據發送到一個活動,然后打開另一個活動。 我打算用一個接口來做到這一點。 那么,我需要為每個片段創建一個三個接口並在活動上實現它們嗎? 我有三個實現獲取每個活動的數據? 在做代碼之前,我需要它。 提前致謝。

演示圖像

首先,讓我們創建一個interface

interface MyInterface {
     fun onSomethingDone(someData: Int)  //A sample function, you can customize it your needs.
 }

然后

像這樣覆蓋你的活動中的onAttachFragment 永遠記住這個規則, 永遠不要將片段緊密地耦合到一個活動 因此,您可以做的是檢查片段並執行相應的操作,如下所示:

class MyActivity : AppCompatActivity() {

    override onAttachFragment(fragment: Fragment) {

           when (fragment) { //A switch statement, checking using instanceOf() in Java.
             is Fragment1 -> fragment.firstFragmentListener = this //Proviving context of your activity to public variable of each fragment.
             is Fragment2 -> fragment.secondFragmentListener = this
             is Fragment3 -> fragment.thirdFragmentListener = this
         }
     }
 }

這將確保您在設置自定義偵聽器時不會將片段緊密耦合,例如將其轉換為特定活動的上下文。

讓我們移動到碎片

 class Fragment1 : Fragment() {

     var firstFragmentListener: MyInterface? =  null  //public member, we are accessing it in our activity method, look above! 

      override onCreate() {

          myButton.setOnClickListener {
              firstFragmentListener.onSomethingDone(999) // Just sending random integer as the method parameter.
           }
       }
  }

這個樣本片段類應該讓您充分了解如何設置它。 正如實現此片段類的方式,您可以使用Fragment2和Fragment3執行相同的操作。

回到我們的活動

但這一次,我們將實現一個監聽器方法。

class MyActivity : AppCompatActivity(), MyInterface {

   override fun onSomethingDone(someData: Int) {
      when (someData) {
         999 -> //Came from first fragment
         1000 -> //Second fragment
         1001 -> //Third fragment
      }
    }

    override onAttachFragment(fragment: Fragment) {

           when (fragment) { //A switch statement, checking using instanceOf() in Java.
             is Fragment1 -> firstFragmentListener = this //Proviving context of your activity to public variable of each fragment.
             is Fragment2 -> secondFragmentListener = this
             is Fragment3 -> thirdFragmentListener = this
         }
     }
 }

這是關於它,我將連接一個鏈接,給你一個瘋狂的想法。 多個片段的單一界面 雖然ViewModel是第二代Android開發的一部分,但它提供了各種優勢,而不僅僅是片段和活動之間的相互通信。

您可以通過New> Java Class創建一個單獨的接口,然后在對話框中選擇Kind> Interface 然后,您將所需的方法添加到接口,並讓您的Activity實現它。 執行此操作后,您將轉到Fragments並在onAttach(Context context)方法中獲取該接口的實例,如下所示:

    @Override
    public void onAttach(@NonNull Context context)
    {
        Log.d(TAG, "onAttach:true");

        super.onAttach(context);

        if (context instanceof OnFragmentInteractionListener)
        {
            mFragmentInteractionListener = (OnFragmentInteractionListener) context;
        }
        else
        {
            throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener");
        }
    }

現在,您可以通過在Fragment類中的任何位置說mFragmentInteractionListener.deleteInternet(true)來調用Interfaces方法。

如果您還有其他問題,請在評論中告訴我。

暫無
暫無

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

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