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:

  • Gibt es einen bestimmten Grund, Amazon SNS anstelle von direkten Baidu Service zu verwenden
  • Vergleichen von Java Swing MVC mit Android Design-Muster
  • Es ist nicht möglich, LayoutInflater im benutzerdefinierten Adapter zu verwenden
  • So erhalten Sie den Dateinamen, wenn Sie auf URL in Webview klicken
  • Android Studio - Lollipop, ADB, & Genymotion Fragen: Geräte werden nicht angezeigt. "Adb server ist veraltet Tötung…"
  • Android Lollipop wissen, ob App als Nutzung Stats Zugang
  • 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?

  • Nicht in der Lage, die aktuelle Ansicht in Viewpager zu bekommen
  • Was ist JNI Graphics oder wie man es benutzt?
  • Wie konvertiert man ein Android Library Project zu einem externen JAR?
  • Zeichnen Sie Diagramm in Android?
  • Android StackView Art von Layout mit horizontalen Swipe
  • Klonen Sie Textansicht, um es an eine ViewGroup anzuhängen
  • 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.