Android CheckedTextView Example

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:

Screenshot_2018-03-08-14-00-52[1]

Leave a Reply