Zeigen einer Löschtaste auf Swipe in einer Listenansicht für Android

Wenn ich mich auf eine andere Stackoverflow-Frage erweitere, habe ich einen Gestenerkennungscode implementiert, damit ich feststellen kann, wann eine Zeile in meiner Listenansicht (die in einem FrameLayout ist) verschoben wurde. Ich folgte der Frage / Antwort von Damian hier, wie man die einzelne Zeile / Ansicht vom Adapter bekommt. Wie bekomme ich den Ort (auf dem Bildschirm) der Zeile in der Listenansicht

Ich habe Code in meinem onFling, der die Ansicht für die Zeile bekommt und versucht, eine Löschtaste zu machen, die als unsichtbar in meinem XML-Layout gesetzt ist, um sichtbar zu sein. Dies geschieht jedoch nicht. Ich habe mich gefragt, wie ich einen Knopf in einer Listenansicht auf einem Swipe sichtbar mache?

class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { int itemId = MyClass.this.lv.pointToPosition( (int) e1.getX(), (int) e1.getY()); Log.v("item id", String.valueOf(itemId)); View v = MyClass.this.adapter .getViewOnScreen(itemId); Button delete = (Button) v.findViewById(R.id.button_delete); delete.setVisibility(View.VISIBLE); //MyClass.this.adapter.notifyDataSetChanged(); } } catch (Exception e) { // nothing } return false; } } 

Meine Liste Adapter Code ist die gleiche wie die referenzierte Frage.

Bearbeiten: Ich habe versucht, getChildAt () auf der Listenansicht zu bekommen, um die Ansicht der Zeile zu erhalten, und das funktioniert, wenn es einen Bildschirm oder weniger von Elementen gibt, aber wenn es mehr als die falsche Ansicht zurückgegeben wird und daher die falsche Löschtaste sichtbar wird.

Bearbeiten 2: Ich habe die Antwort auf die Frage hier , um es zu arbeiten:

  • Android OnGestureListener Fling erkennt nicht
  • Setzen Sie GestureDetector auf alle Kinderansichten
  • Android: Velocity-basiertes ViewPager-Scrollen
  • Onfling und OnTouch arbeiten nicht zusammen
  • Erfassen Sie das Ende des Flings auf ScrollView
  • Drag & Drop + Fling Detector funktioniert nicht
  • Android Swipe Geste nicht zuverlässig
  • Stoppe scrollView in der Mitte der Schriftrolle
  • One Solution collect form web for “Zeigen einer Löschtaste auf Swipe in einer Listenansicht für Android”

    Ich habe so etwas in meiner App einmal umgesetzt. Wie ich es gemacht habe:

     public class MyGestureDetector extends SimpleOnGestureListener { private ListView list; public MyGestureDetector(ListView list) { this.list = list; } //CONDITIONS ARE TYPICALLY VELOCITY OR DISTANCE @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (INSERT_CONDITIONS_HERE) if (showDeleteButton(e1)) return true; return super.onFling(e1, e2, velocityX, velocityY); } private boolean showDeleteButton(MotionEvent e1) { int pos = list.pointToPosition((int)e1.getX(), (int)e1.getY()); return showDeleteButton(pos); } private boolean showDeleteButton(int pos) { View child = list.getChildAt(pos); if (child != null){ Button delete = (Button) child.findViewById(R.id.delete_button_id); if (delete != null) if (delete.getVisibility() == View.INVISIBLE) delete.setVisibility(View.VISIBLE); else delete.setVisibility(View.INVISIBLE); return true; } return false; } } 

    Das hat für mich gearbeitet, hoffe du wirst es an die Arbeit bringen oder es gibt dir wenigstens einen Tipp.

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