When we click on an item in an application either it gives some information or it redirects the user to any other page. In this article, we will learn that how we can implement Item Click Interface in an android application.
What we are going to build in this article?
In this article, we will be using a recycler view with many items. An item is made using CardView which further consists of TextView to show the required text to a user. When a user clicks on any item it displays the position and value of that item. Note that we are going to implement this project in Java Language. Here is a sample video of the application which we are going to build.
Step by Step Implementation
Step 1: Create a new project
- Open a new project.
- We will be working on Empty Activity with language as Java. Leave all other options unchanged.
- You can change the name of the project at your convenience.
- There will be two default files named activity_main.xml and MainActivity.java.
If you don’t know how to create a new project in Android Studio then you can refer to How to Create/Start a New Project in Android Studio?
Step 2: Working with XML files
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" > < androidx.recyclerview.widget.RecyclerView android:layout_width = "match_parent" android:layout_height = "match_parent" android:id = "@+id/recycler_view" tools:listitem = "@layout/item_main" /> </ androidx.constraintlayout.widget.ConstraintLayout > |
Follow the path app > res > layout > right click > new > layout resource file and create a new file named as item_main.xml. Use the below code in item_main.xml file-
XML
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.cardview.widget.CardView android:layout_width = "match_parent" android:layout_height = "wrap_content" android:id = "@+id/card_view" android:layout_margin = "4dp" app:cardCornerRadius = "8dp" > < TextView android:layout_width = "match_parent" android:layout_height = "wrap_content" android:id = "@+id/text_View" android:textSize = "20sp" android:padding = "20dp" android:gravity = "center" /> </ androidx.cardview.widget.CardView > |
Step 3: Working with java files
Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
package com.example.itemclickinterface; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { // initialize variable RecyclerView recyclerView; ArrayList<String> arrayList= new ArrayList<>(); MainAdapter adapter; ItemClickListener itemClickListener; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // assign variable recyclerView=findViewById(R.id.recycler_view); // use for loop for ( int i= 0 ;i< 15 ;i++) { // add values in array list arrayList.add( "Address " +i); } // Initialize listener itemClickListener= new ItemClickListener() { @Override public void onClick( int position, String value) { // Display toast Toast.makeText(getApplicationContext(), "Position : " +position + " || Value : " +value,Toast.LENGTH_SHORT).show(); } }; // set layout manager recyclerView.setLayoutManager( new LinearLayoutManager( this )); // Initialize adapter adapter= new MainAdapter(arrayList,itemClickListener); // set adapter recyclerView.setAdapter(adapter); } } |
Follow the path app > java > com.example.multiple_item_delete > right click > new > java class and create a new file named as MainAdapter.java. Use the below code in MainAdapter.java file-
Java
package com.example.itemclickinterface; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.cardview.widget.CardView; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> { // initialize variables ArrayList<String> arrayList; ItemClickListener itemClickListener; int selectedPosition=- 1 ; // create constructor public MainAdapter(ArrayList<String> arrayList,ItemClickListener itemClickListener) { this .arrayList=arrayList; this .itemClickListener=itemClickListener; } @NonNull @Override public ViewHolder onCreateViewHolder( @NonNull ViewGroup parent, int viewType) { // Initialize view View view= LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_main,parent, false ); // return holder return new ViewHolder(view); } @Override public void onBindViewHolder( @NonNull ViewHolder holder, int position) { // set value on text view holder.textView.setText(arrayList.get(position)); holder.itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // get adapter position int position=holder.getAdapterPosition(); // call listener itemClickListener.onClick(position,arrayList.get(position)); // update position selectedPosition=position; // notify notifyDataSetChanged(); } }); // check conditions if (selectedPosition==position) { // When current position is equal // to selected position // set black background color holder.cardView.setCardBackgroundColor(Color.parseColor( "#000000" )); // set white text color holder.textView.setTextColor(Color.parseColor( "#FFFFFF" )); } else { // when current position is different // set white background holder.cardView.setCardBackgroundColor(Color.parseColor( "#FFFFFF" )); // set black text color holder.textView.setTextColor(Color.parseColor( "#000000" )); } } @Override public int getItemCount() { // return array list size return arrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { // initialize variable CardView cardView; TextView textView; public ViewHolder( @NonNull View itemView) { super (itemView); // assign variable cardView=itemView.findViewById(R.id.card_view); textView=itemView.findViewById(R.id.text_View); } } } |
Follow the path app > java > com.example.multiple_item_delete > right click > new > interface and create a new file named as ItemClickListener.java. Use the below code in MainAdapter.java file-
Java
package com.example.itemclickinterface; public interface ItemClickListener { void onClick( int position,String value); } |
Here is the final output of the application.
Output: