2014-10-28 10 views
14
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
            android:orientation="horizontal" 
            android:layout_width="match_parent" 
            android:stateListAnimator="@anim/anim" 
            android:layout_margin="5dp" 
            android:clickable="true" 
            android:layout_height="wrap_content"> 
    <TextView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/textview" 
       android:minHeight="?android:listPreferredItemHeight" 
       android:gravity="center_vertical"> 

    </TextView> 
</android.support.v7.widget.CardView> 

Utilizzo CardView per visualizzare una riga di testo. Come faccio a scorrere per cancellare quelle righe - che sono le carte di credito? Inoltre, come impostare un onItemClickListener per ogni riga? Ancora una volta, sto usando cardview per visualizzare ogni riga.Come strisciare per eliminare una scheda (utilizzando CardView di appcompat v7)

risposta

12

Volevo fare qualcosa di simile, quindi ho adattato romannurik's Android-SwipeToDismiss per fare esattamente quello che volevamo.

The code is on github con un'applicazione di esempio di lavoro, ed è composto da:

  • 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 usare 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); 
} 
1

Ecco il famoso esempio di Swipe to Dismiss di Roman Nurik.

https://github.com/romannurik/Android-SwipeToDismiss

Esso comprende respingendo elementi di un elenco e la revoca separati View s. Dovrebbe funzionare su qualsiasi View compreso CardView.

SwipeDismissListViewTouchListener utilizzabile in un ListView per scorrere gli elementi. SwipeDismissTouchListener è valido per qualsiasi View per eliminare completamente l'intero View.

Problemi correlati