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