您也可以使用委托。以下是代码示例
Activity 将有 listview 或 recyclerview。需要在activity中处理的方法,将作为action传递给Adapter。
public void CreateListView()
{
testAdapter = new TestAdapter(vm.ForageSamples.ToList(), OnClick);
recyclerView.SetAdapter(testAdapter);
}
private void OnClick(EventArgs e)
{
//your logic
}
Action(委托)将被传递给适配器。该操作将传递给 ViewHolder。
public class TestAdapter : RecyclerView.Adapter
{
List<Sample> forageTests;
private readonly Action<EventArgs> activityClick;
public TestAdapter(List<Sample> tests, Action<EventArgs> activityClick)
{
this.forageTests = tests;
this.activityClick = activityClick;
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
var layout = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.template_foragetests, parent, false);
return new TestViewHolder(layout, activityClick);
}
}
并且viewholder会有按钮点击事件。从适配器传递的动作将在点击事件中被调用。因此,按钮点击事件将被传播到活动。
public class TestViewHolder : RecyclerView.ViewHolder
{
private Action<EventArgs> activityClick;
private Button addButton;
public TestViewHolder (View itemView, Action<EventArgs> activityClick) : base(itemView)
{
this.activityClick = activityClick;
addButton = itemView.FindViewById<Button>(Resource.Id.addbutton);
addButton.Click += OnClick;
}
void OnClick(object sender, EventArgs e)
{
activityClick(e);
}
}
如果您没有使用 viewholder,那么这段代码将被添加到适配器本身中。