-1

I try onActivityResult in fragment currently I am using v4 fragment.

my activity code

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(tag, "0000");

    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
    super.onActivityResult(requestCode, resultCode, data);
}

My fragment code

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.v(getTag(), "in 0");
    if (resultCode == Activity.RESULT_OK) {
        Log.v(getTag(), "in 1");
        if (requestCode == MY_INTENT_CLICK) {
            Log.v(getTag(), "in 2");
            if (null == data)
                return;

            Log.v(getTag(), "in 3");
            Uri selectedImageUri = data.getData(); } } }

I call start Intent in

Log.v(getTag(), "in 00");
                                    Intent intent = new Intent();
                                    Log.v(getTag(), "in 01");
                                    intent.setType("video/*");
                                    Log.v(getTag(), "in 02");
                                    intent.setAction(Intent.ACTION_GET_CONTENT);
                                    Log.v(getTag(), "in 03");
                                    fragment.startActivityForResult(Intent
                                            .createChooser(intent,
                                                    "Select a file"),
                                            MY_INTENT_CLICK);

I also try call intent in

getActivity().startActivityForResult(Intent
                                            .createChooser(intent,
                                                    "Select a file"),
                                            MY_INTENT_CLICK);
startActivityForResult(Intent
                                            .createChooser(intent,
                                                    "Select a file"),
                                            MY_INTENT_CLICK);

But noting is work. I also refer.

Fragment Compatability onActivityResult() Not Working

onActivityResult is not being called in Fragment

onActivityResult() not called in new nested fragment API

Community
  • 1
  • 1
Raja Dhasan
  • 583
  • 1
  • 5
  • 16

1 Answers1

0

Refer below code

public class RegisterDeRegisterResponse {

    private Vector<IResultResponse> _iCallBack = new Vector<IResultResponse>();
    public static RegisterDeRegisterResponse ref = null;

    public static RegisterDeRegisterResponse getInstance() {
        if (ref == null) {
            ref = new RegisterDeRegisterResponse();
        }
        return ref;
    }
    /**
     * Register to recieve server response.
     */
    public void registerForServerResponse(IResultResponse callback) {
        _iCallBack.addElement(callback);
    }

    /**
     * Notify all registered users about server response with corresponding
     * process id.
     */
    public void notifyRegisteredUser(int requestCode, int resultCode,
            Intent data) {

        Enumeration<IResultResponse> enumeration = _iCallBack.elements();
        while (enumeration.hasMoreElements()) {
            IResultResponse callback = enumeration.nextElement();
            callback.onActivityResult(requestCode, resultCode, data);
        }
    }

    /**
     * Deregister to recieve server response
     */
    public void deRegisterForServerResponse(IResultResponse callback) {
        _iCallBack.removeElement(callback);
    }

}

And also make Interface which have onActivityResult method declaration

public interface IResultResponse {

    public void onActivityResult(int requestCode, int resultCode, Intent data);

}

Now in class in which you are calling startActivityForResult put this line before startActivityForResult and implement IresultResonse also

RegisterDeRegisterResponse register1 = RegisterDeRegisterResponse
                    .getInstance();
            register1.registerForServerResponse(this);

and also deregister in onActivityResult

RegisterDeRegisterResponse
        .getInstance().deRegisterForServerResponse((IResultResponse)this);
Anjali Tripathi
  • 1,477
  • 9
  • 28