2017-09-01 105 views
1

我将这个https://github.com/blazsolar/HorizontalPicker库转换为Java绑定库。 该库实现了一个OnItemSelected事件,它在Java中使用像这样。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"> 

现在I'm想知道如何我可以使用这个事件? 我必须修改某些内容吗?或者我可以用不同的方式获得它?

+0

你能不能让Java绑定库可用,所以我可以检查出来吗? – Cyriac

+0

https://gitlab.com/Olias/binding/tree/master/Binding_Horizo​​ntalPicker – Olias

回答

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 
    } 
} 
+0

你有一个“你的IOnClicked实现”的例子吗? – Olias

+0

已更新。另一个选择可能是调整Horizo​​ntalPicker类或在绑定库中重新映射它,但我不知道如何在那里做。 – Cyriac

+0

内部类Clicker:Java.Lang.Object,Horizo​​ntalPicker.IOnItemClicked 私有Horizo​​ntalPicker.IOnItemClicked _onItemClickedImplementation; public void OnItemClicked(int p0) { MessageBus.Default.Post(“1”); } } – Olias