OnLongItemClick in RecyclerView

Ich fange an, RecyclerView in Android zu verwenden. Die Dinge funktionieren gut, bis ich Touch-Listener für meinen Adapter implementiere.

Von diesem Thema:

  • Wo ist com.google.android.gcm.GCMBaseIntentService?
  • Ersetzen Sie die aktuelle Aktivität
  • Android-Kamera-Server gestorben und Kamera-Fehler - 100
  • Wie man zwei Ansichten in Android, die 50% Höhe jeder, es sei denn, man ist kleiner?
  • Bei der Verwendung von SyncAdapters zweimal einloggen
  • Wie bekomme ich die aktuelle Netzwerknutzung von App (oder insgesamt), auch auf Android N?
  • Https://stackoverflow.com/a/26826692/2923403

    Ich kann den Hörer für childview richtig umsetzen. Allerdings möchte ich sowohl OnItemClick als auch OnItemLongClick implementieren, dann erscheint das Problem. Sie werden immer zur selben Zeit gefeuert. OnItemClick zuerst und OnItemLongClick später, was meine Funktion nutzlos macht.

    Hier ist mein Code für den kundenspezifischen Zuhörer (basierend auf dem Code oben, dank Fouad):

    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) { } 

    Und für die Umsetzung:

     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 })); 

    Hast du dafür eine Lösung?

  • Erkennung von Touch auf OpenGL-Objekt?
  • CardView Eckenradius
  • Camera.takePicture () funktioniert nicht an meinem JB & GB & Froyo Handys
  • Zweck der AsyncTask varargs Parameter
  • Wie bekomme ich die Höhe der Tastatur, wenn die Aktivität in Android erstellt
  • Android - Welches zu Active Android oder Realm zu verwenden
  • One Solution collect form web for “OnLongItemClick in RecyclerView”

    Sie können Zuhörer in Ihre benutzerdefinierte Adapterimplementierung hinzufügen. Es wird so etwas wie:

     public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { public interface OnItemClickListener { public void onItemClicked(int position); } public interface OnItemLongClickListener { public boolean onItemLongClicked(int position); } private Fragment mFragment; public static class ViewHolder extends RecyclerView.ViewHolder { public View v; public ViewHolder(View v) { super(v); this.v = v; } } public RecyclerViewAdapter(Fragment fragment) { mFragment = fragment; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { holder.v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mFragment.onItemClicked(position); } }); holder.v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mFragment.onItemLongClicked(position); return true; } }); } . . . } 

    Beachten Sie die Schnittstellendefinition am Anfang. Auf diese Weise übergibt man onClick und onLongClick-Events an dein Fragment zur Handhabung. Ziemlich viel bequem, wissen Sie

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.