Checked TextView
CheckedTextView is an extension of normal TextView that has a checkbox along with some text. It is mainly used in a ListView where we want to show which item is selected or not. Checkmark attribute is used to provide a graphic or a drawable to CheckedTextView.
Download GITHUB code from Here.
Creating New Project
1. In Android Studio, go to File ⇒ New Project and fill all the details required to create a new project. When it prompts to select a default activity, select Blank Activity and proceed.
2. Open build.gradle and add recyclerView dependency.
com.android.support:recyclerview-v7:26.1.0 and rebuild the project.
Build.gradle
dependencies {
// RecyclerView
implementation 'com.android.support:recyclerview-v7:26.1.0'
}
3. In activity_main.xml I have added one RecyclerView with the following basic properties.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="com.example.lenovo.checkedtextviewapp.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
Writing the Adapter Class
After adding the RecyclerView widget, let’s start writing the adapter class to render the data.
4. Create an layout xml named row_item.xml with the below code. This layout file shows a single row in recycler view .
row_item.xml
<?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="wrap_content">
<CheckedTextView
android:id="@+id/simpleCheckedTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="18dp"
android:checked="false"
android:gravity="center_vertical"
android:padding="8dp"
android:textSize="18sp" />
</LinearLayout>
5. Now create a class named SingerAdapter.java and add the below code.
- onCreateViewHolder() : Inflates row_item.xml.
- onBindViewHolder() : Set singersname In checkedTextView and apply onClickListener on each item of recyclerView.
- getItemCount() : Retuns the array length.
SingerAdapter.java
package com.example.lenovo.checkedtextviewapp;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckedTextView;
import android.widget.Toast;
public class SingerAdapter extends RecyclerView.Adapter<SingerAdapter.MyViewHolder> {
private String[] singersName;
Context context;
public SingerAdapter(Context context, String[] booknames) {
this.singersName = booknames;
this.context = context;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
CheckedTextView simpleCheckedTextView;
public MyViewHolder(View view) {
super(view);
simpleCheckedTextView = (CheckedTextView) view.findViewById(R.id.simpleCheckedTextView);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
holder.simpleCheckedTextView.setText(singersName[position]);
// perform on Click Event Listener on CheckedTextView
holder.simpleCheckedTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Boolean value = holder.simpleCheckedTextView.isChecked();
if (value) {
// set check mark drawable and set checked property to false
holder.simpleCheckedTextView.setCheckMarkDrawable(R.drawable.check_ic);
holder.simpleCheckedTextView.setChecked(false);
Toast.makeText(context, "un-Checked", Toast.LENGTH_LONG).show();
} else {
// set check mark drawable and set checked property to true
holder.simpleCheckedTextView.setCheckMarkDrawable(R.drawable.check);
holder.simpleCheckedTextView.setChecked(true);
Toast.makeText(context, "Checked", Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public int getItemCount() {
return singersName.length;
}
}
6. Now open MainActivity.java and write the below code.
MainActivity.java
package com.example.lenovo.checkedtextviewapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private SingerAdapter mAdapter;
String[] singersName = {"Mohammad Rafi", "Lata Mangeshkar", "Sonu Nigam", "Kishore Kumar",
"Sreya Ghoshal ","Asha Bhosle","Udit Narayan","Alka Yagnik"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mAdapter = new SingerAdapter(getApplicationContext(), singersName);
// vertical RecyclerView
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
// horizontal RecyclerView
// RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(mLayoutManager);
// adding inbuilt divider line
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(mAdapter);
}
}
Now when you run the app it will look like this:
