如何使用接口从活动回调到片段回调

时间:2016-10-25 10:22:37

标签: java interface fragment onactivityresult

我有一个片段,我有一个按钮从图库中选择一个图像。画廊已成功打开,但是当我选择图像时,我无法从活动中获得结果。所以我考虑使用回调(接口)。但是,我确实知道如何。

你能告诉我一件事吗?

接口

public interface CallbackListener {
    void onPhotoTake(String url);
}
片段点击

@OnClick(R.id.addPhoto) void photo() {
        if (isStoragePermissionGranted()) {
            Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            context.startActivityForResult(i, RESULT_LOAD_IMAGE);
        }
}

活动

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
}
  • 在这里,我想使用界面
  • 将结果发送回片段

1 个答案:

答案 0 :(得分:7)

如果要将数据发送回片段类,可以采用多种方法:

<强>第一

  1. 在片段类中创建公共方法

  2. 使用活动类onActivityResult()

  3. 中的片段对象调用该方法

    <强>第二

    1. 在activity中创建一个接口,并在fragment中实现该接口。然后在界面的帮助下,将您的数据发送到片段 e.g。
    2. 活动类

      DataReceivedListener listener;
      
      public void setDataReceivedListener(DataReceivedListener listener) {
          this.listener = listener;
      }
      
      public interface DataReceivedListener {
          void onReceived(int requestCode, int resultCode, Intent data)
      }
      

      片段类

      class fragment extends Fragments implements yourActivityClassName.DataReceivedListener {
          @Override
          void onReceived(int requestCode, int resultCode, Intent data) {
      
          }
      
          onViewCreated(...) {
              ((yourActivityName) getActivity()).setDataReceivedListener(this);
          }
      }
      

      在Acitivity类

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (listener != null) {
              listener.onActivityResult(requestCode, resultCode, data);
          }
      }