我正在使用Visual Studio 2017的RecyclerView(Xamarin.Android),這是我的第一個Xamarin項目,因爲我是一名原生Android開發人員,並且我對實現在物品上點擊Recycler View上的事件。我只是用了IDE提供(RecyclerAdapter類)的默認模板創建的RecyclerView.Adapter,它看上去很像本機實現:RecyclerView.ViewHolder在點擊項目
這裏我的代碼:
using System;
using Android.Views;
using Android.Widget;
using Android.Support.V7.Widget;
namespace Airlink
{
class PdfAdapter : RecyclerView.Adapter
{
public event EventHandler<PdfAdapterClickEventArgs> ItemClick;
public event EventHandler<PdfAdapterClickEventArgs> ItemLongClick;
Pdf[] items;
public PdfAdapter(Pdf[] data)
{
items = data;
}
// Create new views (invoked by the layout manager)
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup
parent, int viewType)
{
//Setup your layout here
View itemView = null;
//var id = Resource.Layout.__YOUR_ITEM_HERE;
itemView=LayoutInflater.From(parent.Context).
Inflate(Resource.Layout.pdf_item, parent, false);
var vh = new PdfAdapterViewHolder(itemView, OnClick,
OnLongClick);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
public override void OnBindViewHolder(RecyclerView.ViewHolder
viewHolder, int position)
{
var item = items[position];
// Replace the contents of the view with that element
PdfAdapterViewHolder holder = viewHolder as
PdfAdapterViewHolder;
holder.pdf_name.Text = items[position].Name;
}
public override int ItemCount => items.Length;
void OnClick(PdfAdapterClickEventArgs args) =>
ItemClick?.Invoke(this, args);
void OnLongClick(PdfAdapterClickEventArgs args) =>
ItemLongClick?.Invoke(this, args);
}
public class PdfAdapterViewHolder : RecyclerView.ViewHolder
{
public TextView pdf_name { get; set; }
public PdfAdapterViewHolder(View itemView,
Action<PdfAdapterClickEventArgs> clickListener,
Action<PdfAdapterClickEventArgs> longClickListener) :
base(itemView)
{
pdf_name = itemView.FindViewById<TextView>
(Resource.Id.pdf_name);
itemView.Click += (sender, e) => clickListener(new
PdfAdapterClickEventArgs { View = itemView, Position =
AdapterPosition });
itemView.LongClick += (sender, e) => longClickListener(new
PdfAdapterClickEventArgs { View = itemView, Position =
AdapterPosition });
}
}
public class PdfAdapterClickEventArgs : EventArgs
{
public View View { get; set; }
public int Position { get; set; }
}
}
因此,考慮到我的代碼,我只想知道我可以在哪裏處理點擊的視圖,我不確定是否必須在PdfAdapterClickEventArgs類或者接收PdfAdapterClickEventArgs對象的OnClick和OnLongClick空洞上實現一些代碼,假設我想要顯示一個Toast顯示View中單擊的TextView的名稱。我用它來處理原生Android上的這個動作:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//my code here
}
}
裏面的ViewHolder構造方法。我的意思是,我可以改變默認的C#實現,以獲得類似於上面的代碼片段,但我想保留原始的C#代碼。
是的,沒錯。 –