<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>
I'm using CardView to display a row of texts. How do I swipe to delete those rows -- which are cardviews? Also, how to set an onItemClickListener for each row? Again, I'm using cardview to display each row.
Android Swipe To Delete. Swipe to delete feature is commonly used to delete rows from a RecyclerView. In order to implement Swipe to delete feature, we need to use the ItemTouchHelper utility class.
card view:cardCornerRadius - This attribute is used to set the corner radius for the CardView. card_view:cardElevation - This attribute is used to set the elevation for the CardView. The elevation is used to show the shadow of the CardView.
I wanted to do something similar, so I adapted romannurik's Android-SwipeToDismiss to do exactly what we wanted.
The code is on github with a working sample application, and consists of:
RecyclerView.OnItemTouchListener
that listens to touch events and detects when an item is being swiped, animating it accordingly.SwipeListener
that is called in order to know if an item can be dismissed and called again when items are dismissed.To use it, follow the instructions on github, or just copy the class SwipeableRecyclerViewTouchListener
to your project and use it like this:
@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);
}
Here is the famous Swipe to Dismiss example from Roman Nurik.
https://github.com/romannurik/Android-SwipeToDismiss
It includes dismissing items in a list and dismissing separate View
s. It should work on any View
including CardView
.
SwipeDismissListViewTouchListener
is for using in a ListView
to swipe items.
SwipeDismissTouchListener
is for any View
to dismiss the whole View
completely.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With