RecyclerView long-click to remove an item

In this series of recyclerView tutorials, we’re going to see how to use a long-click to remove an item from recyclerView.

Before that please visit the previous tutorials on what is RecyclerView and How to implement recyclerView using CardView in android.

There are many ways we can remove an item from recyclerView. In this series, we will discuss every possible way we could delete or remove an item from recyclerView. Today we will see a long-click to remove an item.

Before that, we will see some of the other stuff like, how to add a ripple effect on an itemView and how to set divider item decoration in recyclerView.

Let’s discuss three of them below

1. First, add the RecyclerView dependency

implementation ‘androidx.recyclerview:recyclerview:1.1.0’

2. Ripple effect on itemView

We just need to add a line in the layout file of the item which represents the item view for the recyclerView.

android:background=”?attr/selectableItemBackground”

The above attribute will give a ripple effect on the item of the recyclerView.

Example:

3. Set Divider item decoration in recyclerView

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,

DividerItemDecoration.VERTICAL);

recyclerView.addItemDecoration(dividerItemDecoration);

Here we set a divider vertically below each item of the recyclerView.

4. Now. Let’s remove the item from recyclerView with long-click

For removing an item from recyclerView with a long click, set the long click listener on the itemView.

itemView.setOnLongClickListener(new View.OnLongClickListener() {

@Override

public boolean onLongClick(View view) {

moviesList.remove(getAdapterPosition());

notifyItemRemoved(getAdapterPosition());

return true;

}

});

notifyItemRemoved(getAdapterPosition()), it removed the item from recyclerView.

Example:

You can also, use the below codes and run it into your projects.

activity_main.xml

<?xml version=”1.0" encoding=”utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android"

xmlns:app=”http://schemas.android.com/apk/res-auto"

xmlns:tools=”http://schemas.android.com/tools"

android:layout_width=”match_parent”

android:layout_height=”match_parent”

tools:context=”.MainActivity”>

<androidx.recyclerview.widget.RecyclerView

android:id=”@+id/recyclerView”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toTopOf=”parent” />

</androidx.constraintlayout.widget.ConstraintLayout>

row_item.xml

<?xml version=”1.0" encoding=”utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android"

xmlns:app=”http://schemas.android.com/apk/res-auto"

xmlns:tools=”http://schemas.android.com/tools"

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:padding=”5dp”

android:background=”?attr/selectableItemBackground”>

<ImageView

android:id=”@+id/imageView”

android:layout_width=”48dp”

android:layout_height=”48dp”

android:layout_marginStart=”16dp”

android:layout_marginTop=”16dp”

android:layout_marginBottom=”16dp”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintStart_toStartOf=”parent”

app:layout_constraintTop_toTopOf=”parent”

app:srcCompat=”@android:drawable/btn_star_big_on” />

<TextView

android:id=”@+id/textView”

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:layout_marginStart=”16dp”

android:fontFamily=”@font/poppins_semibold”

android:text=”TextView”

android:textSize=”16sp”

android:textColor=”@android:color/black”

app:layout_constraintBottom_toTopOf=”@+id/rowCount”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toEndOf=”@+id/imageView”

app:layout_constraintTop_toTopOf=”parent” />

<TextView

android:id=”@+id/rowCount”

android:layout_width=”0dp”

android:layout_height=”wrap_content”

android:fontFamily=”@font/poppins_light”

android:text=”TextView”

android:textSize=”14sp”

app:layout_constraintBottom_toBottomOf=”parent”

app:layout_constraintEnd_toEndOf=”parent”

app:layout_constraintStart_toStartOf=”@+id/textView”

app:layout_constraintTop_toBottomOf=”@+id/textView” />

</androidx.constraintlayout.widget.ConstraintLayout>

RecyclerViewAdapter.java

package com.codewithgolap.logindesignusingbottomsheet;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import androidx.annotation.NonNull;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder>{

private static final String TAG = “RecyclerAdapter”;

List<String> moviesList;

public RecyclerAdapter(List<String> moviesList) {

this.moviesList = moviesList;

}

@NonNull

@Override

public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());

View view = layoutInflater.inflate(R.layout.row_item, parent, false);

ViewHolder viewHolder = new ViewHolder(view);

return viewHolder;

}

@Override

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.rowCountTextView.setText(String.valueOf(position));

holder.textView.setText(moviesList.get(position));

}

@Override

public int getItemCount() {

return moviesList.size();

}

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

ImageView imageView;

TextView textView, rowCountTextView;

public ViewHolder(@NonNull View itemView) {

super(itemView);

imageView = itemView.findViewById(R.id.imageView);

textView = itemView.findViewById(R.id.textView);

rowCountTextView = itemView.findViewById(R.id.rowCount);

itemView.setOnClickListener(this);

itemView.setOnLongClickListener(new View.OnLongClickListener() {

@Override

public boolean onLongClick(View view) {

moviesList.remove(getAdapterPosition());

notifyItemRemoved(getAdapterPosition());

return true;

}

});

}

@Override

public void onClick(View view) {

Toast.makeText(view.getContext(), moviesList.get(getAdapterPosition()), Toast.LENGTH_SHORT).show();

}

}

}

MainActivty.java

package com.codewithgolap.logindesignusingbottomsheet;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.DividerItemDecoration;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;

RecyclerAdapter recyclerAdapter;

List<String> moviesList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

moviesList = new ArrayList<>();

recyclerView = findViewById(R.id.recyclerView);

recyclerAdapter = new RecyclerAdapter(moviesList);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

recyclerView.setAdapter(recyclerAdapter);

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,

DividerItemDecoration.VERTICAL);

recyclerView.addItemDecoration(dividerItemDecoration);

moviesList.add(“Captain America”);

moviesList.add(“The Fantastic Four”);

moviesList.add(“Howard the Duck”);

moviesList.add(“Blade”);

moviesList.add(“X-Men”);

moviesList.add(“Spider-Man”);

moviesList.add(“Daredevil”);

moviesList.add(“Hulk”);

moviesList.add(“The Punisher”);

moviesList.add(“Ghost Rider”);

moviesList.add(“Iron Man”);

moviesList.add(“Thor”);

moviesList.add(“The Avengers”);

moviesList.add(“Guardians of the Galaxy”);

moviesList.add(“Ant-Man”);

moviesList.add(“Deadpool”);

moviesList.add(“Doctor Strange”);

moviesList.add(“Logan”);

moviesList.add(“Black Panther”);

moviesList.add(“Venom”);

moviesList.add(“Dark Phoenix”);

moviesList.add(“The New Mutants”);

}

}

For more visit www.gbandroidblogs.com

and follow my page here. Click on the clap button and show some love.

--

--

Hi everyone, myself Golap an Android app developer with UI/UX designer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Golap Gunjan Barman

Hi everyone, myself Golap an Android app developer with UI/UX designer.