Showing posts with label CheckBox with ListView. Show all posts
Showing posts with label CheckBox with ListView. Show all posts

Thursday, January 3, 2013

ListView with CheckBox using ArrayAdatpter in Android


Happy New Year to you All Android Developer :)

Today I am going to create a small Android application for
showing Check Box  in List View using Array Adapter in Android,
So lets start it now..

Note : at the end of  this Tutorial , you can find zip source code of this example .

We will create very simple app to do this work
 -------------------------------------------
App Name: CheckBoxListArrayAdapter
Package Name: com.rdc.activity
Android SDK: Android SDK 2.2 / API 8
Default Activity Name: MainActivity.java
-------------------------------------------

MainActivity.java



package com.rdc.activity;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.rdc.adapter.PlanetArrayAdapter;
import com.rdc.model.Planet;
import com.rdc.model.PlanetViewHolder;

public class MainActivity extends Activity {

 private ListView mainListView = null;
 private Planet[] planets = null;
 private ArrayAdapter<Planet> listAdapter = null;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mainListView = (ListView) findViewById(R.id.mainListView);

  // When item is tapped, toggle checked properties of CheckBox and
  // Planet.
  mainListView
  .setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View item,
    int position, long id) {
   Planet planet = listAdapter.getItem(position);
   planet.toggleChecked();
   PlanetViewHolder viewHolder = (PlanetViewHolder) item
    .getTag();
   viewHolder.getCheckBox().setChecked(planet.isChecked());
   }
  });

  // Create and populate planets.
  planets = (Planet[]) getLastNonConfigurationInstance();
  if (planets == null) {
   planets = new Planet[] { new Planet("Mercury"),
     new Planet("Venus"), new Planet("Earth"),
     new Planet("Mars"), new Planet("Jupiter"),
     new Planet("Saturn"), new Planet("Uranus"),
     new Planet("Neptune"), new Planet("Ceres"),
     new Planet("Pluto"), new Planet("Haumea"),
     new Planet("Makemake"), new Planet("Eris") };
  }
  ArrayList<Planet> planetList = new ArrayList<Planet>();
  planetList.addAll(Arrays.asList(planets));

  // Set our custom array adapter as the ListView's adapter.
  listAdapter = new PlanetArrayAdapter(this, planetList);
  mainListView.setAdapter(listAdapter);
 }

 public Object onRetainNonConfigurationInstance() {
  return planets;
 }
}

PlanetArrayAdapter.java
package com.rdc.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.rdc.activity.R;
import com.rdc.model.Planet;
import com.rdc.model.PlanetViewHolder;

/** Custom adapter for displaying an array of Planet objects. */
public class PlanetArrayAdapter extends ArrayAdapter<Planet> {

 private LayoutInflater inflater;

 public PlanetArrayAdapter(Context context, List<Planet> planetList) {
 super(context, R.layout.simplerow, R.id.rowTextView, planetList);
 //Cache the LayoutInflate to avoid asking for a new one each time.
  inflater = LayoutInflater.from(context);
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent){
  Planet planet = (Planet) this.getItem(position);
  CheckBox checkBox;
  TextView textView;

  // Create a new row view
  if (convertView == null) {
  convertView = inflater.inflate(R.layout.simplerow, null);

  textView = (TextView) convertView.findViewById(R.id.rowTextView);
  checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);

  convertView.setTag(new PlanetViewHolder(textView, checkBox));

  // If CheckBox is toggled, update the planet it is tagged with.
  checkBox.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    CheckBox cb = (CheckBox) v;
    Planet planet = (Planet) cb.getTag();
    planet.setChecked(cb.isChecked());
   }
  });
  }
  // Re-use existing row view
  else {

  PlanetViewHolder viewHolder = (PlanetViewHolder) convertView
     .getTag();
   checkBox = viewHolder.getCheckBox();
   textView = viewHolder.getTextView();
  }

  checkBox.setTag(planet);

  // Display planet data
  checkBox.setChecked(planet.isChecked());
  textView.setText(planet.getName());

  return convertView;
 }

}


Planet.java
package com.rdc.model;

/** Holds planet data. */
public class Planet {
 private String name = "";
 private boolean checked = false;

 public Planet() {
 }

 public Planet(String name) {
  this.name = name;
 }

 public Planet(String name, boolean checked) {
  this.name = name;
  this.checked = checked;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public boolean isChecked() {
  return checked;
 }

 public void setChecked(boolean checked) {
  this.checked = checked;
 }

 public String toString() {
  return name;
 }

 public void toggleChecked() {
  checked = !checked;
 }
}

PlanetViewHolder.java
package com.rdc.model;

import android.widget.CheckBox;
import android.widget.TextView;

/** Holds child views for one row. */
public class PlanetViewHolder {
 private CheckBox checkBox;
 private TextView textView;

 public PlanetViewHolder() {
 }

 public PlanetViewHolder(TextView textView, CheckBox checkBox) {
  this.checkBox = checkBox;
  this.textView = textView;
 }

 public CheckBox getCheckBox() {
  return checkBox;
 }

 public void setCheckBox(CheckBox checkBox) {
  this.checkBox = checkBox;
 }

 public TextView getTextView() {
  return textView;
 }

 public void setTextView(TextView textView) {
  this.textView = textView;
 }
}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

 <ListView
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@+id/mainListView">
 </ListView>

</LinearLayout>



simplerow.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

 <TextView
  android:id="@+id/rowTextView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="10dp"
  android:textSize="16sp">
 </TextView>

 <CheckBox
  android:id="@+id/CheckBox01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="10dp"
  android:layout_alignParentRight="true"
  android:layout_marginRight="6sp"
  android:focusable="false">
 </CheckBox>

</RelativeLayout>



AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
 xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.rdc.activity"
 android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="8" />

 <application
  android:icon="@drawable/icon"
  android:label="@string/app_name">
  <activity
   android:name=".MainActivity"
   android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

 </application>
</manifest>

Here is the Result screen



You can download the complete source code zip file here : CheckBoxListArrayAdapter.zip