【问题标题】:Java Event Binding Issue Binding LibraryJava 事件绑定问题绑定库
【发布时间】:2017-09-01 09:28:21
【问题描述】:

我将这个 https://github.com/blazsolar/HorizontalPicker 库转移到 Java 绑定库中。 库实现了一个 OnItemSelected 事件,它在 Java 中就是这样使用的。

@Override
public void onItemSelected(int index)    {
    Toast.makeText(this, "Item selected", Toast.LENGTH_SHORT).show();
}

现在我想在我的 C# 代码中像这样使用它。

var Picker = view.FindViewById<Com.Wefika.Horizontalpicker.HorizontalPicker>(Resource.Id.numberPicker);
Picker.onItemClicked+= delegate{};

不幸的是 onItemClicked 不存在。 我查看了生成的 api xml 并在那里声明了它。

<interface abstract="true" deprecated="not deprecated" final="false" name="HorizontalPicker.OnItemClicked" static="true" visibility="public">
<method abstract="true" deprecated="not deprecated" final="false" name="onItemClicked" native="false" return="void" static="false" synchronized="false" visibility="public">

现在我想知道如何使用此活动? 我必须修改某些内容还是可以通过其他方式获得它?

【问题讨论】:

标签: java c# xamarin xamarin.android java-binding


【解决方案1】:

看起来,问题在于原始项目,因为它无法为其创建事件委托。您可以通过以下代码使用该事件,并且必须为以下代码编写 IOnClicked 的实现:

HorizontalPicker Picker = view.FindViewById<Com.Wefika.Horizontalpicker.HorizontalPicker>(Resource.Id.numberPicker);
HorizontalPickerItemClicked itemclicked = new HorizontalPickerItemClicked();
Picker.SetOnItemClickedListener(itemclicked); 

更新的实现:

public class HorizontalPickerItemClicked : HorizontalPicker.IOnItemClicked
{
    public void Dispose()
    {

    }

    public IntPtr Handle { get; }
    public void OnItemClicked(int p0)
    {
        // Do something with p0
    }
}

【讨论】:

  • 您有“您的 IOnClicked 实现”的示例吗?
  • 已更新。另一种选择可能是调整 Horizo​​ntalPicker 类或在绑定库中重新映射它,但我不确定如何在那里进行。
  • 内部类 Clicker : Java.Lang.Object, Horizo​​ntalPicker.IOnItemClicked { private Horizo​​ntalPicker.IOnItemClicked _onItemClickedImplementation;公共无效 OnItemClicked(int p0) { MessageBus.Default.Post("1"); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多