Wrong requestCode in onActivityResult

前端 未结 6 1113
离开以前
离开以前 2020-11-28 01:14

I\'m starting a new Activity from my Fragment with

startActivityForResult(intent, 1);

and want to handle the result in the Fragment\'s pare

相关标签:
6条回答
  • 2020-11-28 01:31

    in Fragment

      getActivity().startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
    

    in Main Activity:

    if (requestCode == PLACE_PICKER_REQUEST) {
                if (resultCode == RESULT_OK) {    
         //what ever you want to do
                }
    
    0 讨论(0)
  • 2020-11-28 01:34

    Easier:

    Java: int unmaskedRequestCode = requestCode & 0x0000ffff

    Kotlin: val unmaskedRequestCode = requestCode and 0x0000ffff

    Check for the lower 16 bits, just unmask it doing a logical AND with the upper 16 bits zeroed

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        final int unmaskedRequestCode = requestCode & 0x0000ffff
    
        if(unmaskedRequestCode == ORIGINAL_REQUEST_CODE){
          //Do stuff
    
        }
    }
    
    0 讨论(0)
  • 2020-11-28 01:35

    If you are providing constant make it public and then use in startActivityResult

    example:

    public static final int REQUEST_CODE =1;
    getActivity().startActivityForresult(intent, REQUEST_CODE);
    
    0 讨论(0)
  • 2020-11-28 01:37

    The request code is not wrong. When using v4 support library fragments, fragment index is encoded in the top 16 bits of the request code and your request code is in the bottom 16 bits. The fragment index is later used to find the correct fragment to deliver the result.

    Hence for Activities started form fragment object, handle onActivityResult requestCode like below:

    originalRequestCode = changedRequestCode - (indexOfFragment << 16)
          6             =      196614        -       (3 << 16)
    
    0 讨论(0)
  • 2020-11-28 01:53

    You can also define
    super.onActivityResult(requestCode, resultCode, data)
    in Activity (if you overrideonActivityResult) at this

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
    
            ...
    
            default:
                super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    and call startActivityForResult(intent, requestCode) inside your Fragment

    0 讨论(0)
  • 2020-11-28 01:58

    You are calling startActivityForResult() from your Fragment. When you do this, the requestCode is changed by the Activity that owns the Fragment.

    If you want to get the correct resultCode in your activity try this:

    Change:

    startActivityForResult(intent, 1);
    

    To:

    getActivity().startActivityForResult(intent, 1);
    
    0 讨论(0)
提交回复
热议问题