On Feb 21, 2012, at 11:56 AM, Goncalo Oliveira wrote:
> I have the need to do something like this
> 
> public class MyActivity : CrazyActivity 
> 
> Though, CrazyActivity is in a java library. Is there any way of doing this?

Yes, there is a way to do this, but it requires some "glue" code:

        Java example: 
https://github.com/xamarin/monodroid-samples/blob/master/SanityTests/Adder.java#L3
        C# binding example: 
https://github.com/xamarin/monodroid-samples/blob/master/SanityTests/ManagedAdder.cs#L6

Assuming that CrazyActivity didn't add any methods you wanted to invoke or 
override, binding it is fairly easy:

        [Register ("the/package/of/CrazyActivity", DoNotGenerateAcw=true)]
        class CrazyActivity : Android.App.Activity /* assuming Activity is the 
relevant base class */ {
                // ...
        }

If you do need to invoke methods and override virtual methods, see the above 
SanityTests sample, and feel free to ask additional questions. We have a 
work-in-progress JNI document describing how all this works; if you're going to 
do lots of binding, we could provide you early access to it.

If instances of CrazyActivity will be created in Java and "surfaced"/exposed to 
managed code, you'll also need to do two things:

1. Provide an (IntPtr, JniHandleOwnership) constructor:

        public CrazyActivity(IntPtr handle, Android.Runtime.JniHandleOwnership 
transfer)
                : base (handle, transfer)
        {
        }

2. Provide a type mapping between the Java type and the managed wrapper:

        Android.Runtime.TypeManager.RegisterType 
("the/package/of/CrazyActivity", typeof (CrazyActivity));

The TypeManager.RegisterType() call should be performed before the Java 
instance is surfaced in managed code, e.g. in your app's static constructor.

Thanks,
- Jon

_______________________________________________
Monodroid mailing list
[email protected]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to