我有一个RecyclerView
项目网格。单击一个项目后,它会突出显示。
我还希望当用户向右滑动时调用“下一个”方法,当用户向左滑动时调用“上一个”方法。
然而,两者并没有相互配合,因为每个人都拦截了对方的事件。
我如何让他们一起工作?
这是我的代码:
RecyclerView 适配器
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
myHolder = holder as MyView;
myHolder.mMainView.SetOnClickListener(this);
if (selected_position == position)
{
holder.ItemView.SetBackgroundColor(Color.LightGray);
}
else
{
holder.ItemView.SetBackgroundColor(Color.Transparent);
}
}
public void OnClick(View v)
{
int position = mRecyclerView.GetChildLayoutPosition((View)sender);
// Updating old as well as new positions
NotifyItemChanged(selected_position);
selected_position = position;
NotifyItemChanged(selected_position);
}
包含 RecyclerView 的片段
calendarRecyclerView.SetOnTouchListener(this);
public bool OnTouch(View v, MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
x1 = e.GetX();
break;
case MotionEventActions.Up:
x2 = e.GetX();
float deltaX = x2 - x1;
if (Math.Abs(deltaX) > MIN_DISTANCE)
{
// Left to Right swipe action
if (x2 > x1)
{
NextMonth();
}
// Right to left swipe action
else
{
PreviousMonth();
}
}
break;
}
return false;
}
因为我放入return false
了 OnTouch 事件,所以会触发项目的单击事件。但是,MouseDown 事件不会在 OnTouch 中触发,从而阻止了向后滑动检测(因为 x1 始终为 0)。