{"id":1251,"date":"2022-07-24T00:56:00","date_gmt":"2022-09-10T23:27:09","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/uncategorized\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/"},"modified":"2024-03-07T14:35:43","modified_gmt":"2024-03-07T14:35:43","slug":"swipe-to-delete-and-undo-functionality-in-androids-recyclerview","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/","title":{"rendered":"Swipe To Delete and Undo functionality in Android&#8217;s RecyclerView."},"content":{"rendered":"<p>In this guide, we will explore and apply the Swipe to Delete function on the RecyclerView in our Android App.<\/p>\n<h2>Delete by swiping on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Android_(operating_system)\">Android<\/a>.<\/h2>\n<p>The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the ItemTouchHelper utility class.<\/p>\n<h3>Callback for ItemTouchHelper.<\/h3>\n<p>To utilize the ItemTouchHelper class, we must implement the ItemTouchHelper.Callback. The ItemTouchHelper.Callback class is primarily used for drag and drop as well as swipe to delete functionalities. For this tutorial, we will focus solely on swipe to delete. The Android framework provides us with a basic implementation of ItemTouchHelper.Callback called SimpleCallback. However, we will create our own implementation of the Swipe to delete feature. Below are the main methods that need to be overridden in our class:<\/p>\n<p>&#8211; getMovementFlags: Here, we specify the swipe direction by returning the direction flag using the static method makeMovementFlags.<br \/>\n&#8211; onMove: This method is used for drag and drop. If it is not required, we can simply return false.<br \/>\n&#8211; onSwiped: This method is triggered when a swipe action is detected. A complete swipe covers the entire width of the screen. To consider a partial swipe as a swipe, we need to override the following method: getSwipeThreshold.<br \/>\n&#8211; getSwipeThreshold: Here, we return a float value. For example, setting it to 0.5f means that a swipe greater than or equal to 50 percent of the RecyclerView row would be considered as a swipe.<br \/>\n&#8211; onChildDraw: In this method, we create our custom view that indicates a swipe is occurring.<\/p>\n<p>The purpose of ItemTouchHelper.Callback is to enable row swiping functionality, but it does not perform the deletion itself. Instead, we have to manually delete the rows using the RecyclerView Adapter.<\/p>\n<p>No more talking, let&#8217;s start coding. In the next section, we will develop our android app by incorporating a RecyclerView that has the Swipe to Dismiss functionality. Additionally, we will include a Snackbar that offers the undo choice.<\/p>\n<h3>Organizational framework<\/h3>\n<p>Include the subsequent dependency in the build.gradle file of the app.<\/p>\n<pre class=\"post-pre\"><code>implementation 'com.android.support:design:28.0.0-rc01'\r\n<\/code><\/pre>\n<h3>Please provide one option for paraphrasing the following sentence natively:<\/h3>\n<p>&#8220;Write the script in a programming language.&#8221;<\/p>\n<p>Below is the code for the layout of activity_main.xml:<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;android.support.design.widget.CoordinatorLayout xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"https:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"https:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:id=\"@+id\/coordinatorLayout\"\r\n    android:layout_height=\"match_parent\"\r\n    tools:context=\".MainActivity\"&gt;\r\n\r\n    &lt;RelativeLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"&gt;\r\n\r\n    &lt;android.support.v7.widget.RecyclerView\r\n        android:id=\"@+id\/recyclerView\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:orientation=\"vertical\"\r\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\" \/&gt;\r\n\r\n\r\n    &lt;\/RelativeLayout&gt;\r\n\r\n&lt;\/android.support.design.widget.CoordinatorLayout&gt;\r\n<\/code><\/pre>\n<p>Here is the code for the SwipeToDeleteCallback.java class, which is an extension of the ItemTouchHelper.Callback class:<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.androidrecyclerviewswipetodelete;\r\n\r\nimport android.content.Context;\r\nimport android.graphics.Canvas;\r\nimport android.graphics.Color;\r\nimport android.graphics.Paint;\r\nimport android.graphics.PorterDuff;\r\nimport android.graphics.PorterDuffXfermode;\r\nimport android.graphics.drawable.ColorDrawable;\r\nimport android.graphics.drawable.Drawable;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.v4.content.ContextCompat;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.support.v7.widget.helper.ItemTouchHelper;\r\nimport android.view.View;\r\n\r\nabstract public class SwipeToDeleteCallback extends ItemTouchHelper.Callback {\r\n\r\n    Context mContext;\r\n    private Paint mClearPaint;\r\n    private ColorDrawable mBackground;\r\n    private int backgroundColor;\r\n    private Drawable deleteDrawable;\r\n    private int intrinsicWidth;\r\n    private int intrinsicHeight;\r\n\r\n\r\n    SwipeToDeleteCallback(Context context) {\r\n        mContext = context;\r\n        mBackground = new ColorDrawable();\r\n        backgroundColor = Color.parseColor(\"#b80f0a\");\r\n        mClearPaint = new Paint();\r\n        mClearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));\r\n        deleteDrawable = ContextCompat.getDrawable(mContext, R.drawable.ic_delete);\r\n        intrinsicWidth = deleteDrawable.getIntrinsicWidth();\r\n        intrinsicHeight = deleteDrawable.getIntrinsicHeight();\r\n        \r\n\r\n    }\r\n\r\n\r\n    @Override\r\n    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {\r\n        return makeMovementFlags(0, ItemTouchHelper.LEFT);\r\n    }\r\n\r\n    @Override\r\n    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {\r\n        return false;\r\n    }\r\n\r\n    @Override\r\n    public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {\r\n        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);\r\n\r\n        View itemView = viewHolder.itemView;\r\n        int itemHeight = itemView.getHeight();\r\n\r\n        boolean isCancelled = dX == 0 &amp;&amp; !isCurrentlyActive;\r\n\r\n        if (isCancelled) {\r\n            clearCanvas(c, itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom());\r\n            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);\r\n            return;\r\n        }\r\n\r\n        mBackground.setColor(backgroundColor);\r\n        mBackground.setBounds(itemView.getRight() + (int) dX, itemView.getTop(), itemView.getRight(), itemView.getBottom());\r\n        mBackground.draw(c);\r\n\r\n        int deleteIconTop = itemView.getTop() + (itemHeight - intrinsicHeight) \/ 2;\r\n        int deleteIconMargin = (itemHeight - intrinsicHeight) \/ 2;\r\n        int deleteIconLeft = itemView.getRight() - deleteIconMargin - intrinsicWidth;\r\n        int deleteIconRight = itemView.getRight() - deleteIconMargin;\r\n        int deleteIconBottom = deleteIconTop + intrinsicHeight;\r\n\r\n\r\n        deleteDrawable.setBounds(deleteIconLeft, deleteIconTop, deleteIconRight, deleteIconBottom);\r\n        deleteDrawable.draw(c);\r\n\r\n        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);\r\n\r\n\r\n    }\r\n\r\n    private void clearCanvas(Canvas c, Float left, Float top, Float right, Float bottom) {\r\n        c.drawRect(left, top, right, bottom, mClearPaint);\r\n\r\n    }\r\n\r\n    @Override\r\n    public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) {\r\n        return 0.7f;\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<p>The class is considered abstract because we haven&#8217;t implemented the onSwipe method. We will do this in the MainActivity.java class. Within the onChildDraw method, we verify if the swipe has been completed by using the isCancelled boolean. Depending on this, we generate a view with a delete icon. The Swipe threshold has been set to 0.7. This implies that if the row is swiped less than 70%, the onSwipe method will not be activated. You can find the code for the MainActivity.java class below:<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.androidrecyclerviewswipetodelete;\r\n\r\nimport android.graphics.Color;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.design.widget.CoordinatorLayout;\r\nimport android.support.design.widget.Snackbar;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.support.v7.widget.helper.ItemTouchHelper;\r\nimport android.view.View;\r\n\r\nimport java.util.ArrayList;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n\r\n    RecyclerView recyclerView;\r\n    RecyclerViewAdapter mAdapter;\r\n    ArrayList&lt;String&gt; stringArrayList = new ArrayList&lt;&gt;();\r\n    CoordinatorLayout coordinatorLayout;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n\r\n        recyclerView = findViewById(R.id.recyclerView);\r\n        coordinatorLayout = findViewById(R.id.coordinatorLayout);\r\n\r\n        populateRecyclerView();\r\n        enableSwipeToDeleteAndUndo();\r\n\r\n\r\n    }\r\n\r\n    private void populateRecyclerView() {\r\n        stringArrayList.add(\"Item 1\");\r\n        stringArrayList.add(\"Item 2\");\r\n        stringArrayList.add(\"Item 3\");\r\n        stringArrayList.add(\"Item 4\");\r\n        stringArrayList.add(\"Item 5\");\r\n        stringArrayList.add(\"Item 6\");\r\n        stringArrayList.add(\"Item 7\");\r\n        stringArrayList.add(\"Item 8\");\r\n        stringArrayList.add(\"Item 9\");\r\n        stringArrayList.add(\"Item 10\");\r\n\r\n        mAdapter = new RecyclerViewAdapter(stringArrayList);\r\n        recyclerView.setAdapter(mAdapter);\r\n\r\n\r\n    }\r\n\r\n    private void enableSwipeToDeleteAndUndo() {\r\n        SwipeToDeleteCallback swipeToDeleteCallback = new SwipeToDeleteCallback(this) {\r\n            @Override\r\n            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {\r\n\r\n                \r\n                final int position = viewHolder.getAdapterPosition();\r\n                final String item = mAdapter.getData().get(position);\r\n\r\n                mAdapter.removeItem(position);\r\n\r\n\r\n                Snackbar snackbar = Snackbar\r\n                        .make(coordinatorLayout, \"Item was removed from the list.\", Snackbar.LENGTH_LONG);\r\n                snackbar.setAction(\"UNDO\", new View.OnClickListener() {\r\n                    @Override\r\n                    public void onClick(View view) {\r\n                        \r\n                        mAdapter.restoreItem(item, position);\r\n                        recyclerView.scrollToPosition(position);\r\n                    }\r\n                });\r\n\r\n                snackbar.setActionTextColor(Color.YELLOW);\r\n                snackbar.show();\r\n\r\n            }\r\n        };\r\n\r\n        ItemTouchHelper itemTouchhelper = new ItemTouchHelper(swipeToDeleteCallback);\r\n        itemTouchhelper.attachToRecyclerView(recyclerView);\r\n    }\r\n\r\n\r\n}\r\n\r\n<\/code><\/pre>\n<p>To place the ItemTouchHelper on the RecyclerView, we utilize the attachToRecyclerView method. When the Snackbar action is clicked, we restore the item in the RecyclerView by employing the restoreItem method. This method is declared in the RecyclerViewAdapter class. To scroll the RecyclerView to a particular position, we utilize the scrollToPosition function. This is primarily applicable when an item is added at the top of the RecyclerView. The following code represents the cardview_row.xml layout:<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;android.support.v7.widget.CardView xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:card_view=\"https:\/\/schemas.android.com\/apk\/res-auto\"\r\n    android:id=\"@+id\/cardView\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"64dp\"\r\n    android:layout_margin=\"8dp\"\r\n    card_view:cardCornerRadius=\"0dp\"\r\n    card_view:cardElevation=\"2dp\"&gt;\r\n\r\n\r\n    &lt;RelativeLayout\r\n        android:id=\"@+id\/relativeLayout\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:paddingBottom=\"8dp\"\r\n        android:paddingLeft=\"8dp\"\r\n        android:paddingRight=\"8dp\"&gt;\r\n\r\n\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtTitle\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:text=\"Item 1\"\r\n            android:textAppearance=\"@style\/TextAppearance.Compat.Notification.Title\" \/&gt;\r\n    &lt;\/RelativeLayout&gt;\r\n\r\n&lt;\/android.support.v7.widget.CardView&gt;\r\n<\/code><\/pre>\n<p>Below is the provided code for the RecyclerViewAdapter.java class.<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.androidrecyclerviewswipetodelete;\r\n\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.RelativeLayout;\r\nimport android.widget.TextView;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class RecyclerViewAdapter extends RecyclerView.Adapter&lt;RecyclerViewAdapter.MyViewHolder&gt; {\r\n\r\n    private ArrayList&lt;String&gt; data;\r\n\r\n    public class MyViewHolder extends RecyclerView.ViewHolder {\r\n\r\n        private TextView mTitle;\r\n        RelativeLayout relativeLayout;\r\n\r\n        public MyViewHolder(View itemView) {\r\n            super(itemView);\r\n\r\n            mTitle = itemView.findViewById(R.id.txtTitle);\r\n        }\r\n    }\r\n\r\n    public RecyclerViewAdapter(ArrayList&lt;String&gt; data) {\r\n        this.data = data;\r\n    }\r\n\r\n    @Override\r\n    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\r\n        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_row, parent, false);\r\n        return new MyViewHolder(itemView);\r\n    }\r\n\r\n    @Override\r\n    public void onBindViewHolder(MyViewHolder holder, int position) {\r\n        holder.mTitle.setText(data.get(position));\r\n    }\r\n\r\n    @Override\r\n    public int getItemCount() {\r\n        return data.size();\r\n    }\r\n\r\n\r\n    public void removeItem(int position) {\r\n        data.remove(position);\r\n        notifyItemRemoved(position);\r\n    }\r\n\r\n    public void restoreItem(String item, int position) {\r\n        data.add(position, item);\r\n        notifyItemInserted(position);\r\n    }\r\n\r\n    public ArrayList&lt;String&gt; getData() {\r\n        return data;\r\n    }\r\n}\r\n\r\n\r\n<\/code><\/pre>\n<p>Here is the result of the above application in use: We have now reached the conclusion of this tutorial. You can access the project by clicking on the following link:<\/p>\n<p>SwipeToDelete feature for Android RecyclerView.<\/p>\n<p>Link to the project on GitHub<\/p>\n<p>&nbsp;<\/p>\n<p>More Tutorials<\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/java-string-substring-method\/\" target=\"_blank\" rel=\"noopener\">Java String substring() method<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/broadcastreceiver-android-tutor\/\" target=\"_blank\" rel=\"noopener\">BroadcastReceiver Example Tutorial on Android<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/expect-the-easymock-void-method-to-have-its-last-call\/\" target=\"_blank\" rel=\"noopener\">EasyMock void method to have its last call.<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/toggle-button-in-android\/\" target=\"_blank\" rel=\"noopener\">Toggle button in Android<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/java-thread-ensuring-safety\/\" target=\"_blank\" rel=\"noopener\">Java thread ensuring Java code is thread-safe<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we will explore and apply the Swipe to Delete function on the RecyclerView in our Android App. Delete by swiping on Android. The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the ItemTouchHelper utility class. Callback for ItemTouchHelper. [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1251","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Swipe To Delete and Undo functionality in Android&#039;s RecyclerView. - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Swipe To Delete and Undo functionality in Android&#039;s RecyclerView.\" \/>\n<meta property=\"og:description\" content=\"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-10T23:27:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-07T14:35:43+00:00\" \/>\n<meta name=\"author\" content=\"Emily Johnson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emily Johnson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\"},\"author\":{\"name\":\"Emily Johnson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\"},\"headline\":\"Swipe To Delete and Undo functionality in Android&#8217;s RecyclerView.\",\"datePublished\":\"2022-09-10T23:27:09+00:00\",\"dateModified\":\"2024-03-07T14:35:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\"},\"wordCount\":674,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\",\"name\":\"Swipe To Delete and Undo functionality in Android's RecyclerView. - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2022-09-10T23:27:09+00:00\",\"dateModified\":\"2024-03-07T14:35:43+00:00\",\"description\":\"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Swipe To Delete and Undo functionality in Android&#8217;s RecyclerView.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378\",\"name\":\"Emily Johnson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g\",\"caption\":\"Emily Johnson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Swipe To Delete and Undo functionality in Android's RecyclerView. - Blog - Silicon Cloud","description":"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/","og_locale":"en_US","og_type":"article","og_title":"Swipe To Delete and Undo functionality in Android's RecyclerView.","og_description":"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the","og_url":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2022-09-10T23:27:09+00:00","article_modified_time":"2024-03-07T14:35:43+00:00","author":"Emily Johnson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Emily Johnson","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/"},"author":{"name":"Emily Johnson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378"},"headline":"Swipe To Delete and Undo functionality in Android&#8217;s RecyclerView.","datePublished":"2022-09-10T23:27:09+00:00","dateModified":"2024-03-07T14:35:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/"},"wordCount":674,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/","url":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/","name":"Swipe To Delete and Undo functionality in Android's RecyclerView. - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2022-09-10T23:27:09+00:00","dateModified":"2024-03-07T14:35:43+00:00","description":"The Swipe to delete function is frequently employed to remove rows from a RecyclerView. To incorporate this feature, we must make use of the","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/swipe-to-delete-and-undo-functionality-in-androids-recyclerview\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Swipe To Delete and Undo functionality in Android&#8217;s RecyclerView."}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3b041b19cffc258705478ecfab895378","name":"Emily Johnson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a5cb4e73d02ab1d79f2dfe919389ff7c1de072baa97686392031c03d858cc358?s=96&d=mm&r=g","caption":"Emily Johnson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/emilyjohnson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=1251"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1251\/revisions"}],"predecessor-version":[{"id":1781,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1251\/revisions\/1781"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=1251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=1251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=1251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}