Example to show Selected items with checkbox in the RecyclerView.
Step: 1
======
Create a Model class with name, emailId, isSelected variables
Student.java
Step: 2
======
Now Create an Activity with Recycler with button in the xml layout file.
CardViewActivity.java
activity_main.xml
Step: 3
======
Create an Adapter for the RecyclerView and Pass the list of object to the adapter.
CardViewDataAdapter.java
cardview_row.xml
ScreenShots
=========
Sample Demo
===========
Source Code of the Project
=========
Download Link
Step: 1
======
Create a Model class with name, emailId, isSelected variables
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package com.pratap.cardviews1; import java.io.Serializable; public class Student implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String name; private String emailId; private boolean isSelected; public Student() { } public Student(String name, String emailId) { this.name = name; this.emailId = emailId; } public Student(String name, String emailId, boolean isSelected) { this.name = name; this.emailId = emailId; this.isSelected = isSelected; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmailId() { return emailId; } public void setEmailId(String emailId) { this.emailId = emailId; } public boolean isSelected() { return isSelected; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; } } |
Step: 2
======
Now Create an Activity with Recycler with button in the xml layout file.
CardViewActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | package com.pratap.cardviews1; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class CardViewActivity extends AppCompatActivity { private Toolbar toolbar; private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private List<Student> studentList; private Button btnSelection; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); btnSelection = (Button) findViewById(R.id.btnShow); studentList = new ArrayList<Student>(); for (int i = 1; i <= 15; i++) { Student st = new Student("Student " + i, "androidstudent" + i + "@gmail.com", false); studentList.add(st); } if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setTitle("Android Students"); } mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView mRecyclerView.setHasFixedSize(true); // use a linear layout manager mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // create an Object for Adapter mAdapter = new CardViewDataAdapter(studentList); // set the adapter object to the Recyclerview mRecyclerView.setAdapter(mAdapter); btnSelection.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String data = ""; List<Student> stList = ((CardViewDataAdapter) mAdapter) .getStudentist(); for (int i = 0; i < stList.size(); i++) { Student singleStudent = stList.get(i); if (singleStudent.isSelected() == true) { data = data + "\n" + singleStudent.getName().toString(); /* * Toast.makeText( CardViewActivity.this, " " + * singleStudent.getName() + " " + * singleStudent.getEmailId() + " " + * singleStudent.isSelected(), * Toast.LENGTH_SHORT).show(); */ } } Toast.makeText(CardViewActivity.this, "Selected Students: \n" + data, Toast.LENGTH_LONG) .show(); } }); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include android:id="@+id/toolbar" layout="@layout/toolbar" /> <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_margin="5dp" android:layout_weight="1" android:scrollbars="vertical" /> <Button android:id="@+id/btnShow" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="Show Selected" android:background="#00796B" android:textColor="@color/TextPrimaryColor"/> </LinearLayout> |
Step: 3
======
Create an Adapter for the RecyclerView and Pass the list of object to the adapter.
CardViewDataAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | package com.pratap.cardviews1; import java.util.List; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; import android.widget.Toast; import android.widget.CompoundButton.OnCheckedChangeListener; public class CardViewDataAdapter extends RecyclerView.Adapter<CardViewDataAdapter.ViewHolder> { private List<Student> stList; public CardViewDataAdapter(List<Student> students) { this.stList = students; } // Create new views @Override public CardViewDataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate( R.layout.cardview_row, null); // create ViewHolder ViewHolder viewHolder = new ViewHolder(itemLayoutView); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { final int pos = position; viewHolder.tvName.setText(stList.get(position).getName()); viewHolder.tvEmailId.setText(stList.get(position).getEmailId()); viewHolder.chkSelected.setChecked(stList.get(position).isSelected()); viewHolder.chkSelected.setTag(stList.get(position)); viewHolder.chkSelected.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { CheckBox cb = (CheckBox) v; Student contact = (Student) cb.getTag(); contact.setSelected(cb.isChecked()); stList.get(pos).setSelected(cb.isChecked()); Toast.makeText( v.getContext(), "Clicked on Checkbox: " + cb.getText() + " is " + cb.isChecked(), Toast.LENGTH_LONG).show(); } }); } // Return the size arraylist @Override public int getItemCount() { return stList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView tvName; public TextView tvEmailId; public CheckBox chkSelected; public Student singlestudent; public ViewHolder(View itemLayoutView) { super(itemLayoutView); tvName = (TextView) itemLayoutView.findViewById(R.id.tvName); tvEmailId = (TextView) itemLayoutView.findViewById(R.id.tvEmailId); chkSelected = (CheckBox) itemLayoutView .findViewById(R.id.chkSelected); } } // method to access in activity after updating selection public List<Student> getStudentist() { return stList; } } |
cardview_row.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" card_view:cardCornerRadius="5dp" card_view:cardUseCompatPadding="true" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" > <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="name" android:textColor="@android:color/black" android:textSize="18sp" /> <TextView android:id="@+id/tvEmailId" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tvName" android:text="email" android:textColor="@android:color/black" android:textSize="18sp" /> <CheckBox android:id="@+id/chkSelected" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> </RelativeLayout> </android.support.v7.widget.CardView> |
ScreenShots
=========
Sample Demo
===========
Source Code of the Project
=========
Download Link
sir how about to select all and deselect ?
ReplyDeletesir how to select all and deselect all
ReplyDeleteNice post... I also recommend this post too for beginners RecyclerView With CheckBox In Android
ReplyDelete