Wednesday, April 25, 2012

Re: [android-developers] Fragment.onActivityResult is not called

Has this issue been fixed? The bug report on the issue tracker says it's closed, but there are new comments from people having this issue. I am also having this issue. I might be doing it wrong though, since I can't get it to work with any request code.

On Thursday, March 10, 2011 12:15:12 PM UTC-6, Dianne Hackborn wrote:
Whoops, yeah that is a bug.  Thanks for finding it.  I'll fix it in the next update.

On Thu, Mar 10, 2011 at 1:55 AM, Pete Doyle  wrote:
Ran into this issue tonight on my Droid (2.2).  I think there's an issue in FragmentActivity.startActivityFromFragment(...).

YMMV, but this seems to fix it for me:

Basically there are two issues:
  1) "(fragment.mIndex+1)<<16" should be in parentheses since + has precedence over << in Java
  2) requestCode*0xffff should be requestCode&0xffff.  (I think the goal is to strip all but the first 16 bits of the request code).

To understand the fix, assume you have a fragment index of 0 and a requestCode of 1.

With the current code:
(fragment.mIndex+1)<<16 + (requestCode*0xffff)
= (0+1)<<16 + (1*0xFFFF)
= (1)<< (16 + 0xFFFF) // since + has precedence over <<
= 1<<65551
= 32768 // according to my debugger
= 1000 0000 0000 0000 // fragment index is lost, request code changes from 1 to 32768

With this change:
((fragment.mIndex+1)<<16) + (requestCode&0xffff)
 = ((0+1)<<16) + (1&0xFFFF)
 = (1<<16) + 1
 = 65536 + 1
 = 65537
 = 1 0000 0000 0000 0001

Thanks,
Pete

On Wed, Mar 9, 2011 at 9:20 AM, Dianne Hackborn <hackbod@android.com> wrote:
Does the API demo for this work wherever you are running it?  I have tested it on 3.0, 2.3, and 1.6, and it works in those places, not would I expect it to have any trouble elsewhere.   (How this works is very simple, it just masks out the top X bits of the request code to determine which fragment to deliver the result to.)

Also of course if you are overriding FragmentActivity.onActivityResult(), you *do* need to be sure to call the inherited version.  The behavior here is slightly different than the HC implementation; the activity method will always be called first.


On Wed, Mar 9, 2011 at 8:14 AM, drasticp <drasticp@gmail.com> wrote:
I have an application that targets 2.1. I'm using the Android
Compatibility Package to migrate the code in my Activities to
Fragments. I had an Activity which was launching a contact picker as
follows:

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);

The result was appropriately handled in the onActivityResult for the
Activity:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent
data) {
       if (resultCode != Activity.RESULT_OK) return;
   switch (requestCode) {
   case CONTACT_PICKER_RESULT:
       handleResult(data);
       break;
   }
}

Now, I've migrated both the startActivityForResult call and the
onActivityResult into a Fragment. I have also extended
FragmentActivity in the hosting Activity.

The contact picker still launches correctly, but onActivityResult in
the fragment is never called. If I override onActivityResult in the
FragmentActivity, it *IS* called. However, I don't want to handle the
result there because it breaks the encapsulation philosophy of the new
fragments.

Shouldn't onActivityResult in the fragment be called? Am I missing
something? Thanks for your assistance!

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en



--
Dianne Hackborn
Android framework engineer
hackbod@android.com

Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails.  All such questions should be posted on public forums, where I and others can see and answer them.

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en



--
Dianne Hackborn
Android framework engineer
hackbod@android.com

Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails.  All such questions should be posted on public forums, where I and others can see and answer them.

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate