[android-developers] android:onClick and fragments

2012-05-28 Thread Ralph Bergmann | the4thFloor.eu
Hello,


In the layout of my fragment I have a ImageButton where I use the
android:onClick option.

But when I tap on the button I get this error:

Failed to handle callback; interface not implemented,
callback:android.view.View$PerformClick@410a5308
java.lang.IllegalStateException: Could not find a method close(View) in
the activity class xxx for onClick handler on view class
android.widget.ImageView

Why the callback method must be in the FragmentActivity class and not in
the Fragment class?


Ralph

-- 
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+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


Re: [android-developers] android:onClick and fragments

2012-05-28 Thread Mark Murphy
On Mon, May 28, 2012 at 5:51 AM, Ralph Bergmann | the4thFloor.eu
ra...@the4thfloor.eu wrote:
 Why the callback method must be in the FragmentActivity class and not in
 the Fragment class?

Because android:onClick was added in Android 1.6, well before the
existence of fragments, and we have not invented a time machine that
would let us go back in time and change all pre-Android 3.0 devices to
behave differently.

While the Android Support package can add backports of *new* stuff, it
cannot change the behavior of *existing* stuff that well. Hence, you
have to inherit from FragmentActivity.

Now, I have not examined where exactly the android:onClick wiring
exists in the source code. It is conceivable, though unlikely, that
the right overrides in FragmentActivity could handle this. However,
probably then you will run into corresponding problems once you drop
the fragments backport in late 2013 and go with native-only fragments,
as I am not aware that native fragments handle android:onClick any
differently than does the backport.

I agree that having android:onClick route to the containing Fragment
first would be a nice feature.

Note that there is nothing stopping you (or anyone else) from cooking
up a bit of code that takes ralph:onClick attributes and wires them up
to the containing Fragment.

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com | http://github.com/commonsguy
http://commonsware.com/blog | http://twitter.com/commonsguy

Android Training...At Your Office: http://commonsware.com/training

-- 
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+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


Re: [android-developers] android:onClick and fragments

2012-05-28 Thread Dianne Hackborn
The ultimate reason is because android:onClick is implemented by looking
for the method on the view's Context, which will (usually) be your
Activity.  Views have no concept of fragments, so there is no way for them
to find a method on a fragment or know what fragment they should even be
looking at.

On Mon, May 28, 2012 at 3:43 AM, Mark Murphy mmur...@commonsware.comwrote:

 On Mon, May 28, 2012 at 5:51 AM, Ralph Bergmann | the4thFloor.eu
 ra...@the4thfloor.eu wrote:
  Why the callback method must be in the FragmentActivity class and not in
  the Fragment class?

 Because android:onClick was added in Android 1.6, well before the
 existence of fragments, and we have not invented a time machine that
 would let us go back in time and change all pre-Android 3.0 devices to
 behave differently.

 While the Android Support package can add backports of *new* stuff, it
 cannot change the behavior of *existing* stuff that well. Hence, you
 have to inherit from FragmentActivity.

 Now, I have not examined where exactly the android:onClick wiring
 exists in the source code. It is conceivable, though unlikely, that
 the right overrides in FragmentActivity could handle this. However,
 probably then you will run into corresponding problems once you drop
 the fragments backport in late 2013 and go with native-only fragments,
 as I am not aware that native fragments handle android:onClick any
 differently than does the backport.

 I agree that having android:onClick route to the containing Fragment
 first would be a nice feature.

 Note that there is nothing stopping you (or anyone else) from cooking
 up a bit of code that takes ralph:onClick attributes and wires them up
 to the containing Fragment.

 --
 Mark Murphy (a Commons Guy)
 http://commonsware.com | http://github.com/commonsguy
 http://commonsware.com/blog | http://twitter.com/commonsguy

 Android Training...At Your Office: http://commonsware.com/training

 --
 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+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/android-developers?hl=en




-- 
Dianne Hackborn
Android framework engineer
hack...@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+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en