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: