2014-10-17 1 views
13

Ciao Sto usando la libreria di supporto android.support.v7.widget.CardView per ottenere funzionalità cardview nella mia app per Android. Voglio ottenere lo scorrimento per eliminare anche le funzionalità in esso.Come eseguire il swipe per eliminare cardview in Android utilizzando la libreria di supporto

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_gravity="center" 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    card_view:cardCornerRadius="4dp"> 

    <TextView 
     android:id="@+id/info_text" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</android.support.v7.widget.CardView> 

Come ottenere lo scorrimento per eliminare la funzionalità al suo interno?

Grazie in anticipo.

+0

https://github.com/gabrielemariotti/cardslib, controlla questa libreria. Usa un onSwipeDismissListener che potrebbe aiutare. – AmaJayJB

+0

@AmaJayJB true - ma questo è minSDK 14 - il supporto è inferiore .. – ligi

+0

@AmaJayJB Non sto usando quella libreria. Sto usando il concetto di cardview che google ha introdotto nella libreria di supporto –

risposta

29

Ho adattato romannurik's Android-SwipeToDismiss per fare esattamente questo.

The code is on github con un'applicazione di esempio woking, e si compone di:

  • Una sottoclasse di RecyclerView.OnItemTouchListener che ascolta toccare eventi e rileva quando un elemento viene strisciato, l'animazione di conseguenza.
  • A SwipeListener che viene chiamato per sapere se un articolo può essere rimosso e richiamato quando gli articoli vengono respinti.

Per usarlo, seguire le istruzioni su GitHub, o semplicemente copiare la classe SwipeableRecyclerViewTouchListener al progetto e utilizzarlo in questo modo:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mItems = new ArrayList<>(30); 
    for (int i = 0; i < 30; i++) { 
     mItems.add(String.format("Card number %2d", i)); 
    } 

    mAdapter = new CardViewAdapter(mItems); 

    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setAdapter(mAdapter); 

    SwipeableRecyclerViewTouchListener swipeTouchListener = 
      new SwipeableRecyclerViewTouchListener(mRecyclerView, 
        new SwipeableRecyclerViewTouchListener.SwipeListener() { 
         @Override 
         public boolean canSwipe(int position) { 
          return true; 
         } 

         @Override 
         public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 

         @Override 
         public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) { 
          for (int position : reverseSortedPositions) { 
           mItems.remove(position); 
           mAdapter.notifyItemRemoved(position); 
          } 
          mAdapter.notifyDataSetChanged(); 
         } 
        }); 

    mRecyclerView.addOnItemTouchListener(swipeTouchListener); 
} 
+0

Fantastico! Funziona come un fascino, grazie! – Luis

+0

Come eliminare un elemento? Sembra che tu non abbia alcun riferimento all'adattatore/elemento che fai scorrere per rimuoverlo. – russellhoff

+0

Risolto! basta chiamare l'adattatore e rimuovere l'elemento che si desidera all'interno del ciclo for. – russellhoff

8

C'è un nuovo approccio per colpo cancellare gesto a sostegno Android API v7. Il nome della classe è chiamato ItemTouchHelper.

Mr. Paul Burke ha scritto un esempio sorprendente su come implementare questa funzione. Vedere questo link.

+0

verificato questo funziona. Forse aggiungere qualche codice di esempio minimo per migliorare questa risposta? –

Problemi correlati