Checkbox Unchecked: It’s a common problem with beginners in android application development once they implement a checkbox in ListView that automatically gets unchecked while scrolling. In this tutorial, we will learn how to avoid this problem. We will implement a custom adapter with a custom row having checkboxes and titles.
1. App name, Package name, and Project location.
Create a new project with the name CheckBoxListView and package name com.tutorialscache.checkboxchecklist.
![](https://tutorialscache.com/wp-content/uploads/2019/12/Project-name-4.png)
2. Choose Empty Activity
![](https://tutorialscache.com/wp-content/uploads/2019/12/ChooseProject.png)
3. activity_main.xml
Add a Custom ListView using BaseAdapter inside activity_main.xml and assign id listView.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#e9e9e9" tools:context="com.tutorialscache.checkboxlistview.MainActivity"> <ListView android:id="@+id/listview_list" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </LinearLayout>
4. Custom Row movie_row.xml
Right-click on layout and create new > Layout Resource File. This row will be used by the adapter to render each movie item.
![](https://tutorialscache.com/wp-content/uploads/2019/12/custumrow-1.png)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#f7f7f7"> <TextView android:id="@+id/movieNameTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:textSize="20sp" android:textStyle="bold" android:textColor="#000"/> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" /> </RelativeLayout>
5. Create model MovieModel.java
5.1 Right-click on the Package name > New > Java Class and give the model name MovieModel and click Ok.
![](https://tutorialscache.com/wp-content/uploads/2019/12/moviemodel.png)
5.2 Create Getters and Setters
Press Alt +Insert to Generate Getter and Setter.
![](https://tutorialscache.com/wp-content/uploads/2019/12/getter-setter.png)
package com.tutorialscache.checkboxlistview; public class MoviesModel { int id; String moviename; boolean ischecked; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getMoviename() { return moviename; } public void setMoviename(String moviename) { this.moviename = moviename; } public boolean isIschecked() { return ischecked; } public void setIschecked(boolean ischecked) { this.ischecked = ischecked; } }
6. MoviesAdapter.java
Create a new java class and name as MoviesAdapter by clicking on package name > New > Java Class. Extend with BaseAdapter following cmd+insert to implement methods.
![](https://tutorialscache.com/wp-content/uploads/2019/12/adpater.png)
Full MoviesAdapter.java Code.
Tag is one of the most important things in android development to get the position of clicked view. In our case, we will set a position as a tag on our checkbox and we will get tag when the checkbox is clicked. As a result, we will be able to get the exact position of the clicked view which will help to change isChecked state to true/false.
package com.tutorialscache.checkboxlistview; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.TextView; import java.util.ArrayList; public class MoviesAdapter extends BaseAdapter { private Context context; private ArrayList<MovieModel> moviesData; private LayoutInflater layoutInflater; private MovieModel movieModel; public MoviesAdapter(Context context, ArrayList<MovieModel> moviesData) { this.context = context; this.moviesData = moviesData; layoutInflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() {; return moviesData.size(); } @Override public Object getItem(int position) { return moviesData.get(position); } @Override public long getItemId(int position) { return moviesData.get(position).getId(); } @Override public View getView(int position, View view, ViewGroup parent) { View rowView=view; if(rowView==null) { rowView=layoutInflater.inflate(R.layout.movies_row,parent,false); } TextView moviesName=(TextView)rowView.findViewById(R.id.movieNameTv); CheckBox checkBox=(CheckBox)rowView.findViewById(R.id.checkbox); movieModel = moviesData.get(position); moviesName.setText(movieModel.getMoviename()); checkBox.setChecked(movieModel.isIschecked()); // Tag is important to get position clicked checkbox checkBox.setTag(position); checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int currentPos = (int) v.getTag(); boolean isChecked = false; if (moviesData.get(currentPos).isIschecked()==false){ isChecked=true; } Log.d("response ",currentPos+ " "+isChecked); moviesData.get(currentPos).setIschecked(isChecked); notifyDataSetChanged(); } }); return rowView; } }
7. MainActivity.java
Full MainActivity.java Code.
package com.tutorialscache.checkboxlistview; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ListView mlistView; Context context; ArrayList<MovieModel> moviesData; MoviesAdapter moviesAdapter; MovieModel movieModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_main); //getviews mlistView = findViewById(R.id.listview_list); moviesData = new ArrayList<>(); //add Countries Data addMoviesData(); moviesAdapter =new MoviesAdapter(context,moviesData); mlistView.setAdapter(moviesAdapter); } private void addMoviesData() { //Movie1 movieModel =new MovieModel(); movieModel.setId(1); movieModel.setMoviename("Avangers"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie2 movieModel =new MovieModel(); movieModel.setId(2); movieModel.setMoviename("InfinityWar"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie3 movieModel =new MovieModel(); movieModel.setId(3); movieModel.setMoviename("Need For Speed"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie4 movieModel =new MovieModel(); movieModel.setId(4); movieModel.setMoviename("Deadpool"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie5 movieModel =new MovieModel(); movieModel.setId(5); movieModel.setMoviename("War"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie6 movieModel =new MovieModel(); movieModel.setId(6); movieModel.setMoviename("Twilight"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie7 movieModel =new MovieModel(); movieModel.setId(7); movieModel.setMoviename("Twilight saga"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie8 movieModel =new MovieModel(); movieModel.setId(8); movieModel.setMoviename("ABCD"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie9 movieModel =new MovieModel(); movieModel.setId(9); movieModel.setMoviename("ABCD2"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie10 movieModel =new MovieModel(); movieModel.setId(10); movieModel.setMoviename("Dhoom"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie11 movieModel =new MovieModel(); movieModel.setId(11); movieModel.setMoviename("See"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie12 movieModel =new MovieModel(); movieModel.setId(12); movieModel.setMoviename("Batman"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie13 movieModel =new MovieModel(); movieModel.setId(13); movieModel.setMoviename("Man Of Steel"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie14 movieModel =new MovieModel(); movieModel.setId(14); movieModel.setMoviename("Age of Altron"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie15 movieModel =new MovieModel(); movieModel.setId(15); movieModel.setMoviename("Ender Games"); movieModel.setIschecked(false); moviesData.add(movieModel); //Movie16 movieModel =new MovieModel(); movieModel.setId(16); movieModel.setMoviename("Speed"); movieModel.setIschecked(false); moviesData.add(movieModel); } }
Final Output of the app
Relevant: How to integrate Google AdMob into Android Application.
Comments are closed.