Xamarin.Android绑定调用java对象方法
Xamarin.Android binding Call java Object method
我通过名为 Xamarin.GradleBinding 的 visual studio 扩展创建了 java 绑定库。我添加了 ru.rambler.android:swipe-layout:1.0.14
包并在使用它的 SwipeLayout
时一切正常。但不幸的是,它没有创建相应的 C# 类 或类似的东西。我尝试手动添加包,但仍然没有。
我检查了 source on GitHub。 SwipeLayout
有一个 public void
方法 reset()
没有参数:
public void reset()
我尝试使用 JNIEnv
从 c# 调用此方法。
IntPtr type = JNIEnv.FindClass("ru/rambler/libs/swipe_layout/SwipeLayout");
IntPtr method = JNIEnv.GetMethodID(type, "reset", "()V");
try
{
JNIEnv.CallObjectMethod(_swiper.Handle, method);
}
catch (Exception ex)
{
var s = ex.Message;
}
成功找到类型和方法但调用
JNIEnv.CallObjectMethod(_swiper.Handle, method);
此方法使应用程序崩溃,它甚至没有进入 catch 块。
Tt 必须是 _swiper.Handle
第一个参数的原因。
_swiper
字段的类型为 ViewGroup
,因为 SwipeLayout
派生自 ViewGroup
。
我找不到如何获取视图的指针以传递该方法。
调试时,当我调查 _swiper
时,它似乎是 SwipeLayout
的正确实例
我已经用 Xamarin.Android
将控件重写为 C#。它可用 here on my GitHub,但我还没有时间测试它,所以它可能有错误。
但您可以尝试一下,并可能修复我在使用原始 .java
源代码重写期间遗漏的错误。
我通过名为 Xamarin.GradleBinding 的 visual studio 扩展创建了 java 绑定库。我添加了 ru.rambler.android:swipe-layout:1.0.14
包并在使用它的 SwipeLayout
时一切正常。但不幸的是,它没有创建相应的 C# 类 或类似的东西。我尝试手动添加包,但仍然没有。
我检查了 source on GitHub。 SwipeLayout
有一个 public void
方法 reset()
没有参数:
public void reset()
我尝试使用 JNIEnv
从 c# 调用此方法。
IntPtr type = JNIEnv.FindClass("ru/rambler/libs/swipe_layout/SwipeLayout");
IntPtr method = JNIEnv.GetMethodID(type, "reset", "()V");
try
{
JNIEnv.CallObjectMethod(_swiper.Handle, method);
}
catch (Exception ex)
{
var s = ex.Message;
}
成功找到类型和方法但调用
JNIEnv.CallObjectMethod(_swiper.Handle, method);
此方法使应用程序崩溃,它甚至没有进入 catch 块。
Tt 必须是 _swiper.Handle
第一个参数的原因。
_swiper
字段的类型为 ViewGroup
,因为 SwipeLayout
派生自 ViewGroup
。
我找不到如何获取视图的指针以传递该方法。
调试时,当我调查 _swiper
时,它似乎是 SwipeLayout
我已经用 Xamarin.Android
将控件重写为 C#。它可用 here on my GitHub,但我还没有时间测试它,所以它可能有错误。
但您可以尝试一下,并可能修复我在使用原始 .java
源代码重写期间遗漏的错误。