2016年8月4日木曜日

RecyclerViewにアイテムクリックとアイテムロングクリックを実装するメモ[Visual Studio 2015 with Xamarin.Android]

このメモは
https://developer.xamarin.com/guides/android/user_interface/recyclerview/
を参考にしています。ほとんど一緒。
イベント2種類くらいだからこれで良いのか?

まずは、  public class myViewHolder : RecyclerView.ViewHolderのコンストラクタをオーバーロードすると以下になる。




public class listViewHolder : RecyclerView.ViewHolder
    {
        public listViewHolder(View rootView, Action listener, 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));

            };





0 件のコメント:

コメントを投稿