【问题标题】:Xamarin.Android binding Call java Object methodXamarin.Android 绑定调用 java 对象方法
【发布时间】:2018-01-17 09:17:16
【问题描述】:

我通过名为 Xamarin.GradleBinding 的 Visual Studio 扩展创建了 Java 绑定库。我添加了ru.rambler.android:swipe-layout:1.0.14 包,在使用它的SwipeLayout 时,一切正常。但不幸的是,它没有创建相应的 C# 类或类似的东西。我尝试手动添加包,但仍然没有。

我检查了source on GitHubSwipeLayout 有一个 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 中不存在构建 gradles
  • 它有效,当我添加AXML文件时它显示自定义视图,但没有c#等效类
  • 你要找什么课
  • @G.hakim SwipeLayout
  • 它有什么作用?可能会有一个 xamarin android 等价物,为什么不使用它

标签: java xamarin xamarin.android jnienv java-binding


【解决方案1】:

我已经使用Xamarin.Android 将控件重写为 C#。可用here on my GitHub,但我还没有时间测试它,所以它可能有错误。

但是您可以尝试一下,并有可能使用原始.java 源代码修复我在重写期间遗漏的错误。

【讨论】:

  • 谢谢,我试试看结果告诉你
  • 对不起,它确实有错误。它可以很好地绘制布局,但是在它上面调用重置会使它消失,同时它应该重置状态,如果我快速滑动布局滑动太多。 :(但感谢您的努力
  • 但请随意解决问题,这应该只是疏忽:-)
  • 我需要那个库,因为我想要它的功能而不需要查看代码。我还需要参考其他 java 包,我不能坐下来重写我可能需要的每个库
  • 我明白了。您肯定需要更多地研究 Xamarin Java 库绑定,以了解如何为绑定程序提供有关如何绑定类的提示。应该可以在一些帮助下绑定任何本机库。
猜你喜欢
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多