Android'de RecyclerView kullanmaya başlıyorum. Bağdaştırıcım için dokunmatik dinleyiciyi uygulayana kadar işler iyi çalışıyor. Bu konuyla itibarenOnLongItemBu kategoridekiullüzüntüleyemiyorum
: Ben doğru childview için dinleyici uygulayabilir
https://stackoverflow.com/a/26826692/2923403
. Ancak, hem OnItemClick hem de OnItemLongClick'i uygulamak istiyorum, sonra sorun görünür. Her zaman aynı zamanda kovulurlar. OnItemClick ilk ve OnItemLongClick daha sonra işlevimi işe yaramaz hale getirir. İşte (Fouad için yukarıdaki koduna dayalı, teşekkürler) benim özel dinleyicisi için kodudur:public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public static interface OnItemClickListener {
public boolean onItemClick(View view, int position);
public void onItemLongClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null) {
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildPosition(childView));
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
Ve uygulanması için:
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public boolean onItemClick(View view, int position) {
//This is fired 1st
}
@Override
public void onItemLongClick(View view, int position) {
//This comes later
}));
mı bunun için herhangi bir çözümü var ?
Hi.It durumumda her iki olayın da aynı anda patlatıldığını görüyoruz – Souris
Geridönüşümünüzden (engelli) onGünlük dinleyicileri kaldırdınız mı? Onlara ihtiyacın yok. Aktivitenizde veya parçanızda 'RecyclerViewAdapter.OnItemClickListener' ve' RecyclerViewAdapter.OnItemLongClickListener' öğelerini uygulayın ve ilgili arabirim yöntemlerini geçersiz kılın. –
Teşekkürler. İşe yarıyor. Çözümü kabul ettim. : D – Souris