Swiping, um eine Karte zu löschen, flackert für eine kurze Sekunde vor dem Animieren

Ich habe Cardview in meiner Anwendung mit dem Feature Swipe rechts zu löschen. In dem Moment, in dem ich richtig sauge, geht die Kartenansicht und kommt für eine Zehntelsekunde zurück und dann geht es los, was flackert.

Mein Code geht so für den Swipe Touch Hörer. Ich aktualisiere den Content Resolver und benachrichtige den Adapter.

SwipeableRecyclerViewTouchListener swipeTouchListener = new SwipeableRecyclerViewTouchListener(recyclerView, new SwipeableRecyclerViewTouchListener.SwipeListener() { @Override public boolean canSwipe(int position) { return true; } @Override public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) { for (int position : reverseSortedPositions) { Post post = posts.get(position); post.setIsDeleted(true); getActivity().getContentResolver().update(PostsContract.PostEntry.buildUriForPost(posts.get(position).get_ID()), Utility.changePostToContentValue(post), "_id=" + post.get_ID(),null); posts.remove(position); adapter.notifyItemRemoved(position); } } }); recyclerView.addOnItemTouchListener(swipeTouchListener); 

Mein onLoadFinished Sieht so aus

 @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if(data!=null && data.getCount() != posts.size()){ posts.clear(); while (data.moveToNext()){ Post post = new Post(data); posts.add(post); adapter.notifyDataSetChanged(); } } } 

Wenn ich Pausen platziere. Es funktioniert gut in der Handler onDismissedSwipeByRight, wo die gelöschte Karte nicht sichtbar ist. Aber wenn es darum geht, OnLoadFinished Break Point Ich sehe die gelöschte Karte kam zurück und dann geht automatisch aus, nachdem die Funktion ausgeführt wird, obwohl die Größe der Beiträge Arraylist ist genau das gleiche.

Da die gelöschte Karte für ein Zehntel einer Sekunde zurückkommt. Dies verursacht ein Flackern. Kann mir jemand sagen, wo ich etwas falsch mache?

  • AutoCompleteTextView wird von CursorLoader unterstützt
  • Android CursorLoader vs AsyncQueryHandler?
  • CursorLoader wird nach der Datenänderung nicht aktualisiert
  • Filtern von ListView durch 'selection' in CursorLoader
  • Füllen Sie Widgets aus einem Cursor in onLoadFinished ()
  • Sortierreihenfolge funktioniert nicht mit listView und Cursorlader
  • SQLite-Daten zu einem RecyclerView
  • Wie kann ich die CursorLoader-Ergebnisse sortieren?
  • One Solution collect form web for “Swiping, um eine Karte zu löschen, flackert für eine kurze Sekunde vor dem Animieren”

    Von dem, was ich in den docs sehe, sehe ich, dass das Beispiel auch adapter.notifyDataSetChanged(); anruft adapter.notifyDataSetChanged(); Wie so:

     SwipeableRecyclerViewTouchListener swipeTouchListener = new SwipeableRecyclerViewTouchListener(recyclerView, new SwipeableRecyclerViewTouchListener.SwipeListener() { @Override public boolean canSwipe(int position) { return true; } @Override public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) { for (int position : reverseSortedPositions) { Post post = posts.get(position); post.setIsDeleted(true); getActivity().getContentResolver().update(PostsContract.PostEntry.buildUriForPost(posts.get(position).get_ID()), Utility.changePostToContentValue(post), "_id=" + post.get_ID(),null); posts.remove(position); adapter.notifyItemRemoved(position); } adapter.notifyDataSetChanged(); } }); 

    Der Grund für dein Problem könnte sein, dass der Zuhörer sich darum kümmert, den Blick nach rechts zu machen, aber sobald die Geste vollständig ist, nimmt er den Blick wieder normal, damit er wiederverwendet werden kann. Sie können versuchen, die Ansicht GONE zu machen, bis sie vom recyclerview wiederverwendet wird (sichtbar im Adapter).

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