私はRecyclerView
にアイテムのグリッドを持っています。アイテムをクリックすると、ハイライト表示されます。
また、ユーザーが右にスワイプすると「次の」メソッドが呼び出され、左にスワイプすると「前の」メソッドが呼び出されます。
しかし、2つはお互いにうまくいかないので、それぞれが他のイベントを傍受します。
どうやって一緒に働くのですか?RecyclerView fling and item click
これは私のコードです:
RecyclerViewアダプタ私は、OnTouchイベントでアイテムのクリックをreturn false
を入れているので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;
}
が含まれてい
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);
}
断片イベントが発生します。ただし、MouseDownイベントはOnTouchで発生せず、スワイプバック検出(beacuse x1は常に0)を防ぎます。
は、2がの他のイベントの各インターセプトとして、あなたはもっとこのライン –
@OmarHossamEldinを説明することができ、お互いにうまくいきません私は、彼らがお互いをブロックしているので、すべての出来事が完全に呼ばれるわけではないということを意味しました。質問の末尾に説明が追加されました。まだ明らかでない場合は、教えてください。 – amitairos
RecyclerViewをViewPager内で使用することができます –