2017-09-01 103 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