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

Ste*_*pan 4 java interface fragment onactivityresult

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

你能给我一些建议吗?

接口

public interface CallbackListener {
    void onPhotoTake(String url);
}
Run Code Online (Sandbox Code Playgroud)

在片段点击

@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);
        }
}
Run Code Online (Sandbox Code Playgroud)

活动

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

Sah*_*nda 8

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

第一

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

  2. 使用活动类中的片段对象调用该方法onActivityResult()


第二

  1. 在activity中创建一个接口,并在fragment中实现该接口.然后在界面的帮助下,将您的数据发送到片段,例如

活动类

DataReceivedListener listener;

public void setDataReceivedListener(DataReceivedListener listener) {
    this.listener = listener;
}

public interface DataReceivedListener {
    void onReceived(int requestCode, int resultCode, Intent data)
}
Run Code Online (Sandbox Code Playgroud)

片段类

class fragment extends Fragments implements yourActivityClassName.DataReceivedListener {
    @Override
    void onReceived(int requestCode, int resultCode, Intent data) {

    }

    onViewCreated(...) {
        ((yourActivityName) getActivity()).setDataReceivedListener(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

在Acitivity类中

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