6

Ho implementato cardview nella mia applicazione con il swipe della funzione da eliminare. Nel momento in cui scorro a destra, la vista della scheda passa e ritorna per un decimo di secondo, quindi il guadagno si spegne provocando uno sfarfallio.L'operazione di scorrimento per eliminare un cardview causa uno sfarfallio per un breve secondo prima di animare

Il mio codice va così per l'ascoltatore a scorrimento rapido. Sto aggiornando il risolutore di contenuto e informando l'adattatore.

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

mio onLoadFinished appare come questa

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

} 

Quando ho messo punti di rottura. Funziona correttamente nel gestore onDismissedSwipeByRight dove la scheda eliminata non è visibile. Ma quando si tratta del punto di interruzione OnLoadFinished, vedo la scheda cancellata che viene ripristinata automaticamente e che si spegne automaticamente dopo l'esecuzione della funzione, anche se la dimensione dei messaggi Arraylist è esattamente la stessa.

Poiché la scheda cancellata ritorna per un decimo di secondo. Ciò provoca uno sfarfallio. Qualcuno può dirmi dove sto andando storto?

+0

Perché hai un 'for loop' all'interno di' onDismissedBySwipeRight'? –

+0

reverseSortedPositions è una matrice. Ma funziona solo una volta. – Abhik

+0

aggiungi un codice temporale per vedere quanto tempo impiega ciascuna linea. La mia ipotesi è che stai facendo troppo lavoro in quel metodo. –

risposta

0

Da quello che vedo nel docs, vedo che l'esempio chiama anche adapter.notifyDataSetChanged(); in questo modo:

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

         } 
        }); 

Il motivo per il vostro problema potrebbe essere che l'ascoltatore si prende cura di rendere il colpo in vista della destra , ma una volta che il gesto è completo, riporta la vista alla normalità, in modo che possa essere riutilizzata. Puoi provare a visualizzare GONE finché non viene riutilizzato da Recyclerview (renderlo visibile nell'adattatore).

Problemi correlati