Android開發 - 使用自定義介面在新視窗中傳回資料

阿俊学JAVA發表於2024-08-17
  • Android開發中,有時候我們需要在新開啟的視窗中傳遞資料回來。例如:在新開啟的 DialogFragment 視窗傳遞資料回 MainActivity 啟動視窗

  • 程式碼舉例

    • 首先在 MainActivity 中定義例項化一個 DialogFragment 視窗

      // MainActivity.java
      // 點選按鈕開啟一個 DialogFragment 視窗
      btn.setOnClickListener(v ->{
          DialogFragment1 dialogFragment = new DialogFragment1(); // 假定 DialogFragment 視窗類名為DialogFragment1
          dialogFragment.show(getFragmentManager(), "dialogFragment"); // 顯示 DialogFragment 視窗
      });
      
    • 隨後在需要開啟的 DialogFragment 類建立介面並回傳資料

      //DialogFragment1.java
      // SetOnClickDialogListener 為自定義類,在未建立完成時回持續爆紅
      private SetOnClickDialogListener clickListener;
      //定義構造方法,用於在 MainActivity 中接收資料
      public void mOnClickListener(SetOnClickDialogListener l){
          this.clickListener = l;
      }
      //自定義類的介面,裡面的 ClickDialogListener 為 DialogFragment 中自定義的使用方法與形參,用於回傳資料
      public interface SetOnClickDialogListener{
          //這裡假定需要回傳一個字串與一個整數
          void ClickDialogListener(String str, int num);
      }
      //點選按鈕回傳資料
      btn.setOnClickListener(v -> {
          clickListener.ClickDialogListener("hallow, world!", 1);	//回傳資料
          this.dismiss();//關閉視窗
      });
      
    • MainActivity 中接收資料

      // MainActivity.java
      btn.setOnClickListener(v ->{
          DialogFragment1 dialogFragment = new DialogFragment1(); // 假定 DialogFragment 視窗類名為DialogFragment1
          dialogFragment.show(getFragmentManager(), "dialogFragment"); // 顯示 DialogFragment 視窗
          //使用 DialogFragment 類中自定義的構造方法進行接收資料
          dialogFragment.mOnClickListener((str, num) -> {
              //充分利用所接收到的資料
              if (num == 1) {
                  btn.setText(str)
              }
          });
      });
      
  • 如此這般即可實現資料回傳,如果是在 MainActivity 中傳遞資料到 DialogFragment 中不建議使用此方法,建議使用 Bundle 類 進行傳遞

相關文章