https://developer.xamarin.com/guides/android/user_interface/recyclerview/
を参考にしています。ほとんど一緒。
イベント2種類くらいだからこれで良いのか?
まずは、 public class myViewHolder : RecyclerView.ViewHolderのコンストラクタをオーバーロードすると以下になる。
public class listViewHolder : RecyclerView.ViewHolder { public listViewHolder(View rootView, Actionlistener, Action Longlistener) : base(rootView) {
Action<int> listener, Action<int> Longlistenerを追加している。
そのコンストラクタの中で
rootView.LongClick += (sender, e) => Longlistener(base.AdapterPosition);
rootView.Click += (sender, e) => listener(base.AdapterPosition);
クリックとロングクリックを発動させる為に登録。
次に、先ほど作ったRecyclerView.ViewHolderのコンストラクタを使うために
public class myAdapter : RecyclerView.Adapterに二つのイベントハンドラを用意。
例)
public event EventHandler<int> ItemClick;
public event EventHandler<int> ItemLongClick;
このイベントハンドラを使うのは、
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup viewGroup, int viewType)
のリターン文。
例)
return new myViewHolder(view, OnClick,OnLongClick);
で、実際にrecyclerviewにイベントを渡すためにAdapterに以下を付ける。
void OnClick(int position){
if (ItemClick != null)
ItemClick(this, position);
}
void OnLongClick(int position)
{
if (ItemLongClick != null)
ItemLongClick(this, position);
}
最後に、 mAdapter = new myAdapter(mItem);アイテムを登録した所でイベント登録。
mLAdapter.ItemClick += (sender, e) =>{
var activity = (MainActivity)Activity;
activity.ListItemClickListener(mLAdapter.GetItem(e));
WebDownload.DownloadImagetoSD(mLAdapter.GetItem(e));
};
mLAdapter.ItemLongClick += (sender, e) =>
{
var activity = (MainActivity)Activity;
activity.DialogShow(mLAdapter.GetItem(e));
};