From 84b91a4f264d31b17df9f456fa8ddcab77be4bb6 Mon Sep 17 00:00:00 2001 From: sheiksyedm Date: Mon, 29 Jun 2026 15:46:45 +0530 Subject: [PATCH 1/2] Fix Material Slider ACW implementor build failure (#1484) Remove the restricted BaseOnChangeListener/BaseOnSliderTouchListener base interfaces and break the C# implements chain on the typed sub-interfaces to avoid the ACW type-erasure clash. Re-add typed AddOn*/RemoveOn* listener methods via Additions so the public API uses Slider.IOnChangeListener and RangeSlider.IOnChangeListener as recommended by Android. Bump nugetVersion to 1.14.0.4. --- config.json | 2 +- .../Additions/SliderListenerMethods.cs | 100 ++++++++++++++++++ .../PublicAPI/PublicAPI.Unshipped.txt | 40 +++++-- .../material/Transforms/Metadata.xml | 70 ++++++------ 4 files changed, 163 insertions(+), 49 deletions(-) create mode 100644 source/com.google.android.material/material/Additions/SliderListenerMethods.cs diff --git a/config.json b/config.json index 4813778fe..91b0a3067 100644 --- a/config.json +++ b/config.json @@ -3518,7 +3518,7 @@ "groupId": "com.google.android.material", "artifactId": "material", "version": "1.14.0", - "nugetVersion": "1.14.0.3", + "nugetVersion": "1.14.0.4", "nugetId": "Xamarin.Google.Android.Material", "comments": "Requires API-34" }, diff --git a/source/com.google.android.material/material/Additions/SliderListenerMethods.cs b/source/com.google.android.material/material/Additions/SliderListenerMethods.cs new file mode 100644 index 000000000..497d0d657 --- /dev/null +++ b/source/com.google.android.material/material/Additions/SliderListenerMethods.cs @@ -0,0 +1,100 @@ +using System; +using Android.Runtime; + +namespace Google.Android.Material.Slider; + +// Hand-written add/remove listener methods for Slider and RangeSlider. +// The auto-generated versions are removed from Metadata.xml because the base interfaces +// (BaseOnChangeListener, BaseOnSliderTouchListener) use erased generics that cause +// ACW type erasure clashes and implementor failures. These manual implementations use +// the correct JNI signature while accepting the typed sub-interfaces directly. +// This pattern (remove in metadata + re-add in Additions) is standard in .NET Android bindings. + +public partial class Slider +{ + const string _addOnChangeListenerJni = "(Lcom/google/android/material/slider/BaseOnChangeListener;)V"; + const string _removeOnChangeListenerJni = "(Lcom/google/android/material/slider/BaseOnChangeListener;)V"; + const string _addOnSliderTouchListenerJni = "(Lcom/google/android/material/slider/BaseOnSliderTouchListener;)V"; + const string _removeOnSliderTouchListenerJni = "(Lcom/google/android/material/slider/BaseOnSliderTouchListener;)V"; + + public unsafe void AddOnChangeListener(Slider.IOnChangeListener listener) + { + const string __id = "addOnChangeListener." + _addOnChangeListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void RemoveOnChangeListener(Slider.IOnChangeListener listener) + { + const string __id = "removeOnChangeListener." + _removeOnChangeListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void AddOnSliderTouchListener(Slider.IOnSliderTouchListener listener) + { + const string __id = "addOnSliderTouchListener." + _addOnSliderTouchListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void RemoveOnSliderTouchListener(Slider.IOnSliderTouchListener listener) + { + const string __id = "removeOnSliderTouchListener." + _removeOnSliderTouchListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } +} + +public partial class RangeSlider +{ + const string _addOnChangeListenerJni = "(Lcom/google/android/material/slider/BaseOnChangeListener;)V"; + const string _removeOnChangeListenerJni = "(Lcom/google/android/material/slider/BaseOnChangeListener;)V"; + const string _addOnSliderTouchListenerJni = "(Lcom/google/android/material/slider/BaseOnSliderTouchListener;)V"; + const string _removeOnSliderTouchListenerJni = "(Lcom/google/android/material/slider/BaseOnSliderTouchListener;)V"; + + public unsafe void AddOnChangeListener(RangeSlider.IOnChangeListener listener) + { + const string __id = "addOnChangeListener." + _addOnChangeListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void RemoveOnChangeListener(RangeSlider.IOnChangeListener listener) + { + const string __id = "removeOnChangeListener." + _removeOnChangeListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void AddOnSliderTouchListener(RangeSlider.IOnSliderTouchListener listener) + { + const string __id = "addOnSliderTouchListener." + _addOnSliderTouchListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } + + public unsafe void RemoveOnSliderTouchListener(RangeSlider.IOnSliderTouchListener listener) + { + const string __id = "removeOnSliderTouchListener." + _removeOnSliderTouchListenerJni; + Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; + __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + GC.KeepAlive(listener); + } +} + diff --git a/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt b/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt index 6c8e0ffac..77bf41019 100644 --- a/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt +++ b/source/com.google.android.material/material/PublicAPI/PublicAPI.Unshipped.txt @@ -1982,8 +1982,6 @@ Google.Android.Material.Slider.BasicLabelFormatter Google.Android.Material.Slider.BasicLabelFormatter.BasicLabelFormatter() -> void Google.Android.Material.Slider.BasicLabelFormatter.GetFormattedValue(float value) -> string! Google.Android.Material.Slider.BasicLabelFormatter.InterfaceConsts -Google.Android.Material.Slider.IBaseOnChangeListener -Google.Android.Material.Slider.IBaseOnSliderTouchListener Google.Android.Material.Slider.ILabelFormatter Google.Android.Material.Slider.ILabelFormatter.GetFormattedValue(float p0) -> string! Google.Android.Material.Slider.ISliderOrientation @@ -1991,6 +1989,13 @@ Google.Android.Material.Slider.ITickVisibilityMode Google.Android.Material.Slider.LabelFormatter Google.Android.Material.Slider.LabelFormatterConsts Google.Android.Material.Slider.RangeSlider +Google.Android.Material.Slider.RangeSlider.AddOnChangeListener(Google.Android.Material.Slider.RangeSlider.IOnChangeListener! listener) -> void +Google.Android.Material.Slider.RangeSlider.AddOnSliderTouchListener(Google.Android.Material.Slider.RangeSlider.IOnSliderTouchListener! listener) -> void +Google.Android.Material.Slider.RangeSlider.ChangeEventArgs +Google.Android.Material.Slider.RangeSlider.ChangeEventArgs.ChangeEventArgs(Google.Android.Material.Slider.RangeSlider! p0, float p1, bool p2) -> void +Google.Android.Material.Slider.RangeSlider.ChangeEventArgs.P0.get -> Google.Android.Material.Slider.RangeSlider! +Google.Android.Material.Slider.RangeSlider.ChangeEventArgs.P1.get -> float +Google.Android.Material.Slider.RangeSlider.ChangeEventArgs.P2.get -> bool Google.Android.Material.Slider.RangeSlider.IOnChangeListener Google.Android.Material.Slider.RangeSlider.IOnChangeListener.OnValueChange(Google.Android.Material.Slider.RangeSlider! p0, float p1, bool p2) -> void Google.Android.Material.Slider.RangeSlider.IOnSliderTouchListener @@ -2000,17 +2005,40 @@ Google.Android.Material.Slider.RangeSlider.RangeSlider(Android.Content.Context! Google.Android.Material.Slider.RangeSlider.RangeSlider(Android.Content.Context! context, Android.Util.IAttributeSet? attrs) -> void Google.Android.Material.Slider.RangeSlider.RangeSlider(Android.Content.Context! context, Android.Util.IAttributeSet? attrs, int defStyleAttr) -> void Google.Android.Material.Slider.RangeSlider.RangeSlider(nint javaReference, Android.Runtime.JniHandleOwnership transfer) -> void +Google.Android.Material.Slider.RangeSlider.RemoveOnChangeListener(Google.Android.Material.Slider.RangeSlider.IOnChangeListener! listener) -> void +Google.Android.Material.Slider.RangeSlider.RemoveOnSliderTouchListener(Google.Android.Material.Slider.RangeSlider.IOnSliderTouchListener! listener) -> void +Google.Android.Material.Slider.RangeSlider.StartTrackingTouchEventArgs +Google.Android.Material.Slider.RangeSlider.StartTrackingTouchEventArgs.P0.get -> Google.Android.Material.Slider.RangeSlider! +Google.Android.Material.Slider.RangeSlider.StartTrackingTouchEventArgs.StartTrackingTouchEventArgs(Google.Android.Material.Slider.RangeSlider! p0) -> void +Google.Android.Material.Slider.RangeSlider.StopTrackingTouchEventArgs +Google.Android.Material.Slider.RangeSlider.StopTrackingTouchEventArgs.P0.get -> Google.Android.Material.Slider.RangeSlider! +Google.Android.Material.Slider.RangeSlider.StopTrackingTouchEventArgs.StopTrackingTouchEventArgs(Google.Android.Material.Slider.RangeSlider! p0) -> void Google.Android.Material.Slider.Slider +Google.Android.Material.Slider.Slider.AddOnChangeListener(Google.Android.Material.Slider.Slider.IOnChangeListener! listener) -> void +Google.Android.Material.Slider.Slider.AddOnSliderTouchListener(Google.Android.Material.Slider.Slider.IOnSliderTouchListener! listener) -> void +Google.Android.Material.Slider.Slider.ChangeEventArgs +Google.Android.Material.Slider.Slider.ChangeEventArgs.ChangeEventArgs(Google.Android.Material.Slider.Slider! p0, float p1, bool p2) -> void +Google.Android.Material.Slider.Slider.ChangeEventArgs.P0.get -> Google.Android.Material.Slider.Slider! +Google.Android.Material.Slider.Slider.ChangeEventArgs.P1.get -> float +Google.Android.Material.Slider.Slider.ChangeEventArgs.P2.get -> bool Google.Android.Material.Slider.Slider.IOnChangeListener Google.Android.Material.Slider.Slider.IOnChangeListener.OnValueChange(Google.Android.Material.Slider.Slider! p0, float p1, bool p2) -> void Google.Android.Material.Slider.Slider.IOnSliderTouchListener Google.Android.Material.Slider.Slider.IOnSliderTouchListener.OnStartTrackingTouch(Google.Android.Material.Slider.Slider! p0) -> void Google.Android.Material.Slider.Slider.IOnSliderTouchListener.OnStopTrackingTouch(Google.Android.Material.Slider.Slider! p0) -> void +Google.Android.Material.Slider.Slider.RemoveOnChangeListener(Google.Android.Material.Slider.Slider.IOnChangeListener! listener) -> void +Google.Android.Material.Slider.Slider.RemoveOnSliderTouchListener(Google.Android.Material.Slider.Slider.IOnSliderTouchListener! listener) -> void Google.Android.Material.Slider.Slider.SetEnabled(bool p0) -> void Google.Android.Material.Slider.Slider.Slider(Android.Content.Context! context) -> void Google.Android.Material.Slider.Slider.Slider(Android.Content.Context! context, Android.Util.IAttributeSet? attrs) -> void Google.Android.Material.Slider.Slider.Slider(Android.Content.Context! context, Android.Util.IAttributeSet? attrs, int defStyleAttr) -> void Google.Android.Material.Slider.Slider.Slider(nint javaReference, Android.Runtime.JniHandleOwnership transfer) -> void +Google.Android.Material.Slider.Slider.StartTrackingTouchEventArgs +Google.Android.Material.Slider.Slider.StartTrackingTouchEventArgs.P0.get -> Google.Android.Material.Slider.Slider! +Google.Android.Material.Slider.Slider.StartTrackingTouchEventArgs.StartTrackingTouchEventArgs(Google.Android.Material.Slider.Slider! p0) -> void +Google.Android.Material.Slider.Slider.StopTrackingTouchEventArgs +Google.Android.Material.Slider.Slider.StopTrackingTouchEventArgs.P0.get -> Google.Android.Material.Slider.Slider! +Google.Android.Material.Slider.Slider.StopTrackingTouchEventArgs.StopTrackingTouchEventArgs(Google.Android.Material.Slider.Slider! p0) -> void Google.Android.Material.Slider.SliderOrientation Google.Android.Material.Slider.SliderOrientationConsts Google.Android.Material.Slider.TickVisibilityMode @@ -6721,8 +6749,6 @@ virtual Google.Android.Material.SideSheet.SideSheetDialog.DismissWithSheetAnimat virtual Google.Android.Material.SideSheet.SideSheetDialog.SetFitsSystemWindows(bool p0) -> void virtual Google.Android.Material.SideSheet.SideSheetDialog.SetSheetEdge(int p0) -> void virtual Google.Android.Material.Slider.RangeSlider.ActiveThumbIndex.get -> int -virtual Google.Android.Material.Slider.RangeSlider.AddOnChangeListener(Google.Android.Material.Slider.IBaseOnChangeListener! listener) -> void -virtual Google.Android.Material.Slider.RangeSlider.AddOnSliderTouchListener(Google.Android.Material.Slider.IBaseOnSliderTouchListener! listener) -> void virtual Google.Android.Material.Slider.RangeSlider.Centered.get -> bool virtual Google.Android.Material.Slider.RangeSlider.Centered.set -> void virtual Google.Android.Material.Slider.RangeSlider.ClearOnChangeListeners() -> void @@ -6744,8 +6770,6 @@ virtual Google.Android.Material.Slider.RangeSlider.MinSeparation.get -> float virtual Google.Android.Material.Slider.RangeSlider.MinSeparation.set -> void virtual Google.Android.Material.Slider.RangeSlider.OnSaveInstanceState() -> Android.OS.IParcelable! virtual Google.Android.Material.Slider.RangeSlider.PickActiveThumb() -> bool -virtual Google.Android.Material.Slider.RangeSlider.RemoveOnChangeListener(Google.Android.Material.Slider.IBaseOnChangeListener! listener) -> void -virtual Google.Android.Material.Slider.RangeSlider.RemoveOnSliderTouchListener(Google.Android.Material.Slider.IBaseOnSliderTouchListener! listener) -> void virtual Google.Android.Material.Slider.RangeSlider.ScheduleTooltipTimeout() -> void virtual Google.Android.Material.Slider.RangeSlider.SetActiveThumbIndex(int index) -> void virtual Google.Android.Material.Slider.RangeSlider.SetCustomThumbDrawable(Android.Graphics.Drawables.Drawable! drawable) -> void @@ -6838,8 +6862,6 @@ virtual Google.Android.Material.Slider.RangeSlider.ValueTo.set -> void virtual Google.Android.Material.Slider.RangeSlider.Values.get -> System.Collections.Generic.IList! virtual Google.Android.Material.Slider.RangeSlider.Values.set -> void virtual Google.Android.Material.Slider.Slider.ActiveThumbIndex.get -> int -virtual Google.Android.Material.Slider.Slider.AddOnChangeListener(Google.Android.Material.Slider.IBaseOnChangeListener! listener) -> void -virtual Google.Android.Material.Slider.Slider.AddOnSliderTouchListener(Google.Android.Material.Slider.IBaseOnSliderTouchListener! listener) -> void virtual Google.Android.Material.Slider.Slider.Centered.get -> bool virtual Google.Android.Material.Slider.Slider.Centered.set -> void virtual Google.Android.Material.Slider.Slider.ClearOnChangeListeners() -> void @@ -6859,8 +6881,6 @@ virtual Google.Android.Material.Slider.Slider.LabelBehavior.get -> int virtual Google.Android.Material.Slider.Slider.LabelBehavior.set -> void virtual Google.Android.Material.Slider.Slider.MinSeparation.get -> float virtual Google.Android.Material.Slider.Slider.PickActiveThumb() -> bool -virtual Google.Android.Material.Slider.Slider.RemoveOnChangeListener(Google.Android.Material.Slider.IBaseOnChangeListener! listener) -> void -virtual Google.Android.Material.Slider.Slider.RemoveOnSliderTouchListener(Google.Android.Material.Slider.IBaseOnSliderTouchListener! listener) -> void virtual Google.Android.Material.Slider.Slider.ScheduleTooltipTimeout() -> void virtual Google.Android.Material.Slider.Slider.SetActiveThumbIndex(int index) -> void virtual Google.Android.Material.Slider.Slider.SetCustomThumbDrawable(Android.Graphics.Drawables.Drawable! drawable) -> void diff --git a/source/com.google.android.material/material/Transforms/Metadata.xml b/source/com.google.android.material/material/Transforms/Metadata.xml index fac3fdb71..451b66000 100644 --- a/source/com.google.android.material/material/Transforms/Metadata.xml +++ b/source/com.google.android.material/material/Transforms/Metadata.xml @@ -319,49 +319,43 @@ com.google.android.material.appbar.AppBarLayout - - - com.google.android.material.slider.BaseOnChangeListener - - - com.google.android.material.slider.BaseOnChangeListener - - - - - com.google.android.material.slider.BaseOnSliderTouchListener - - - com.google.android.material.slider.BaseOnSliderTouchListener - + + + - + + + + path="/api/package[@name='com.google.android.material.slider']/interface[@name='RangeSlider.OnChangeListener']/implements[@name='com.google.android.material.slider.BaseOnChangeListener']" /> + - + + + + path="/api/package[@name='com.google.android.material.slider']/class[@name='BaseSlider']/method[@name='addOnSliderTouchListener']" /> + path="/api/package[@name='com.google.android.material.slider']/class[@name='BaseSlider']/method[@name='removeOnSliderTouchListener']" /> Google.Android.Material.ListItem From 25d341485690769a673434d8e1042b671ce489ff Mon Sep 17 00:00:00 2001 From: sheiksyedm Date: Mon, 29 Jun 2026 16:52:43 +0530 Subject: [PATCH 2/2] Move GC.KeepAlive into finally for slider listener marshalling Wrap the JNI invoke in try/finally so GC.KeepAlive runs even when the call throws, preventing premature collection of the listener handle. Addresses PR review feedback. --- .../Additions/SliderListenerMethods.cs | 80 +++++++++++++++---- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/source/com.google.android.material/material/Additions/SliderListenerMethods.cs b/source/com.google.android.material/material/Additions/SliderListenerMethods.cs index 497d0d657..638d4c4c1 100644 --- a/source/com.google.android.material/material/Additions/SliderListenerMethods.cs +++ b/source/com.google.android.material/material/Additions/SliderListenerMethods.cs @@ -22,8 +22,14 @@ public unsafe void AddOnChangeListener(Slider.IOnChangeListener listener) const string __id = "addOnChangeListener." + _addOnChangeListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void RemoveOnChangeListener(Slider.IOnChangeListener listener) @@ -31,8 +37,14 @@ public unsafe void RemoveOnChangeListener(Slider.IOnChangeListener listener) const string __id = "removeOnChangeListener." + _removeOnChangeListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void AddOnSliderTouchListener(Slider.IOnSliderTouchListener listener) @@ -40,8 +52,14 @@ public unsafe void AddOnSliderTouchListener(Slider.IOnSliderTouchListener listen const string __id = "addOnSliderTouchListener." + _addOnSliderTouchListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void RemoveOnSliderTouchListener(Slider.IOnSliderTouchListener listener) @@ -49,8 +67,14 @@ public unsafe void RemoveOnSliderTouchListener(Slider.IOnSliderTouchListener lis const string __id = "removeOnSliderTouchListener." + _removeOnSliderTouchListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } } @@ -66,8 +90,14 @@ public unsafe void AddOnChangeListener(RangeSlider.IOnChangeListener listener) const string __id = "addOnChangeListener." + _addOnChangeListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void RemoveOnChangeListener(RangeSlider.IOnChangeListener listener) @@ -75,8 +105,14 @@ public unsafe void RemoveOnChangeListener(RangeSlider.IOnChangeListener listener const string __id = "removeOnChangeListener." + _removeOnChangeListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void AddOnSliderTouchListener(RangeSlider.IOnSliderTouchListener listener) @@ -84,8 +120,14 @@ public unsafe void AddOnSliderTouchListener(RangeSlider.IOnSliderTouchListener l const string __id = "addOnSliderTouchListener." + _addOnSliderTouchListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } public unsafe void RemoveOnSliderTouchListener(RangeSlider.IOnSliderTouchListener listener) @@ -93,8 +135,14 @@ public unsafe void RemoveOnSliderTouchListener(RangeSlider.IOnSliderTouchListene const string __id = "removeOnSliderTouchListener." + _removeOnSliderTouchListenerJni; Java.Interop.JniArgumentValue* __args = stackalloc Java.Interop.JniArgumentValue[1]; __args[0] = new Java.Interop.JniArgumentValue(listener == null ? IntPtr.Zero : ((Java.Lang.Object)listener).Handle); - _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); - GC.KeepAlive(listener); + try + { + _members.InstanceMethods.InvokeVirtualVoidMethod(__id, this, __args); + } + finally + { + GC.KeepAlive(listener); + } } }