У меня есть RecyclerView
, у которого есть сетка предметов. При нажатии на элемент он выделяется.
Я также хочу, чтобы, когда пользователь переместился прямо, вызывается метод 'next', и когда пользователь перебирает левый, вызывается метод 'previous'.
Однако они не работают друг с другом, так как каждый перехватывает события другого.
Как заставить их работать вместе?RecyclerView fling и item click
Это мой код:
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, предотвращая обнаружение обратного пути (beacuse x1 всегда 0).
Однако два не работают друг с другом, так как каждый перехватывает события другого, Вы можете объяснить больше этой линии –
@OmarHossamEldin Я имел в виду, что не все события называются полностью, поскольку они «блокируют» друг друга. Внизу вопроса добавлено объяснение. Если это еще не ясно, скажите мне. – amitairos
Вы можете использовать RecyclerView внутри ViewPager –