11 Aug 2014

Checkbox Listview | custom listview with checkbox in android

Hello Friends,

This tutorial shows you how to add android check box in a list view. We will develop custom adapter to populate our android list view with check box and search record from list view.

Out Put :


Step 1: selector_checkbox.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ic_checkbox" android:state_selected="false"/>
    <item android:drawable="@drawable/ic_checkbox_active" android:state_selected="true"/>
    <item android:drawable="@drawable/ic_checkbox"/> <!-- default -->


</selector>

Step 2: Create main.xml :

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/edtSearch"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:drawableLeft="@drawable/ic_search"
            android:drawablePadding="5dp"
            android:focusableInTouchMode="true"
            android:gravity="center_vertical"
            android:hint="Search"
            android:inputType="text"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:cacheColorHint="@android:color/transparent"
        android:paddingTop="5dp" />

    <Button
        android:id="@+id/btnDone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Done" />

</LinearLayout>

Step 3: Create row_item.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:padding="10dp" >

        <TextView
            android:id="@+id/txtItemName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true"
            android:text="@string/app_name"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@android:color/black" />
    </LinearLayout>

    <ImageView
        android:id="@+id/imgvCheck"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:contentDescription="@string/app_name"
        android:paddingRight="10dp"
        android:src="@drawable/selector_checkbox" />

</LinearLayout>

Step 4: Create class  ItemBean.java: 

public class ItemBean
{     
       public String ItemName;
       public boolean isSelected ;

       public String getItemName()
       {
              return ItemName;
       }
       public void setItemName(String displayName)
       {
              this.ItemName = displayName;
       }
       public boolean isSelected()
       {
              return isSelected;
       }
       public void setSelected(boolean isSelected)
       {
              this.isSelected = isSelected;
       }
}

Step 5: Create ItemAdapter.java :

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ItemAdapter extends BaseAdapter
{
       private Context mContext;
       private LayoutInflater inflater;
       public List<ItemBean> arraylistData = null;
       private ArrayList<ItemBean> arraylist;

       public ItemAdapter(Context context, List<ItemBean> listbean)
       {
              mContext = context;
              this.arraylistData = listbean;
              inflater = LayoutInflater.from(mContext);

              this.arraylist = new ArrayList<ItemBean>();
              this.arraylist.addAll(listbean);

       }

       public class ViewHolder
       {
              TextView txtItemName;
              ImageView imgvCheck;
       }

       @Override
       public int getCount()
       {
              return arraylistData.size();
       }

       @Override
       public ItemBean getItem(int position)
       {
              return arraylistData.get(position);
       }

       @Override
       public long getItemId(int position)
       {
              return position;
       }     

       public View getView(final int position, View view, ViewGroup parent)
       {
              final ViewHolder holder;
              if (view == null)
              {
                     holder = new ViewHolder();
                     view = inflater.inflate(R.layout.row_item, null);
                     holder.txtItemName = (TextView) view.findViewById(R.id.txtItemName);
                     holder.imgvCheck = (ImageView) view.findViewById(R.id.imgvCheck);
                     view.setTag(holder);

              }
              else
              {
                     holder = (ViewHolder) view.getTag();
              }

              // Set data to view=================================================
              try
              {
                     ItemBean bean = arraylistData.get(position);

                     if (bean.isSelected)
                           holder.imgvCheck.setSelected(true);
                     else
                           holder.imgvCheck.setSelected(false);


                     holder.txtItemName.setText(bean.getItemName());


                     view.setOnClickListener(new View.OnClickListener()
                     {
                           public void onClick(View v)
                           {
                                  for (int i = 0; i < arraylistData.size(); i++)
                                  {
                                         ItemBean bean = arraylistData.get(position);
                                         if (i == position)
                                         {            
                                                if(bean.isSelected())
                                                {
                                                       bean.setSelected(false);
                                                }
                                                else
                                                {                                                     
                                                       bean.setSelected(true);
                                                }

                                         }                                       
                                         notifyDataSetChanged();
                                  }
                           }
                     });
                     holder.imgvCheck.setTag(bean);
              }
              catch (Exception e)
              {
                     e.printStackTrace();
              }

              return view;
       }

       // Filter Class
       public void filter(String charText)
       {
              charText = charText.toLowerCase();
              arraylistData.clear();
              if (charText.length() == 0)
              {
                     arraylistData.addAll(arraylist);
              }
              else
              {
                     for (ItemBean contact : arraylist)
                     {
                           if (contact.getItemName().toLowerCase().contains(charText))
                           {
                                  arraylistData.add(contact);
                           }
                     }
              }
              notifyDataSetChanged();
       }

}

Step 6: MainActivity.java :

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener
{
       private ListView listview;
       private ItemAdapter adapter;
       private EditText editsearch;
       private ArrayList<ItemBean> arrlistItems = new ArrayList<ItemBean>();
       int selectionCount=0;
       private Button btnDone;

       @Override
       protected void onCreate(Bundle savedInstanceState)
       {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.layout_main);

              initializeViews();

              //Add data in arraylist
              for (int i = 0; i < 10; i++)
              {
                     ItemBean bean=new ItemBean();
                     bean.setItemName("Item " + (i));

                     arrlistItems.add(bean);
              }

              adapter = new ItemAdapter(MainActivity.this, arrlistItems);
              listview.setAdapter(adapter);
       }


       // views=========================================
       void initializeViews()
       {
              listview = (ListView) findViewById(R.id.listview);
              editsearch = (EditText) findViewById(R.id.edtSearch);
              btnDone=(Button) findViewById(R.id.btnDone);

              btnDone.setOnClickListener(this);

              // Search contact like text enter in edit text.
              editsearch.addTextChangedListener(new TextWatcher()
              {
                     @Override
                     public void afterTextChanged(Editable arg0)
                     {
                           String text = editsearch.getText().toString().toLowerCase();
                           adapter.filter(text);
                     }

                     @Override
                     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
                     {
                     }

                     @Override
                     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
                     {
                     }
              });
       }


       @Override
       public void onClick(View v)
       {
              switch (v.getId())
              {
              case R.id.btnDone:

                     ArrayList<ItemBean> arrayList=new ArrayList<ItemBean>();

                     ArrayList<ItemBean> arraydata = (ArrayList<ItemBean>) adapter.arraylistData;

                     for (int i = 0; i < arraydata.size(); i++)
                     {
                           ItemBean bean = arraydata.get(i);

                           if (bean.isSelected)
                           {
                                  arrayList.add(arraydata.get(i));
                           }
                     }                         
                     Toast.makeText(MainActivity.this, "Selected count = "+arrayList.size(), Toast.LENGTH_SHORT).show();

                     break;

              default:
                     break;
              }
       }
}


I will be happy if you will provide your feedback or follow this blog. Any suggestion and help will be appreciated.
Thank you :)

7 Jun 2014

Listview delete item | Delete Row Item in ListView | Delete a row from list view on button click in android

Hello friends,

Today i am going to post very important post which used in daily development of application.
I will be having list, on press of edit button an alert dialog box will pop out asking you for confirmation with having Yes and Cancel Button. Lets start using coding...



Step 1: Create main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear_popup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:padding="5dp" >

        <Button
            android:id="@+id/btnClearAll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:background="@drawable/btn_blue"
            android:padding="5dp"
            android:text="Clear all"
            android:textColor="@android:color/white"
            android:textSize="12sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btnEdit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@drawable/btn_blue"
            android:padding="5dp"
            android:text="Edit"
            android:textColor="@android:color/white"
            android:textSize="12sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="Delete List item"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@android:color/white"
            android:textStyle="bold" />
    </RelativeLayout>

    <ListView
        android:id="@+id/lstviewitems"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="2dp"
        android:cacheColorHint="@android:color/transparent"
        android:divider="@drawable/menu_seprator"
        android:dividerHeight="1dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="true"
        android:scrollingCache="false" >
    </ListView>

    <TextView
        android:id="@+id/txtNoFound"
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:gravity="center"
        android:text="No data found"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black"
        android:visibility="gone" />

</LinearLayout>
Step 2: Create row_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" >

    <ImageButton
        android:id="@+id/imgbtnDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:background="@android:color/transparent"
        android:contentDescription="@string/app_name"
        android:src="@drawable/ic_delete" />

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_marginBottom="3dp"
        android:layout_weight="1"
        android:paddingBottom="12dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingTop="12dp"
        android:singleLine="true"
        android:text="@string/app_name"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black" />

</LinearLayout>
Step 3: Item Class:
public class Item 
{
 public String Title;

 public String getTitle() 
 {
  return Title;
 }

 public void setTitle(String title) 
 {
  Title = title;
 }
 
}
Step 4: MainActivity.class
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity 
{
 private ListView listviewitems;
 private ItemAdapter adapteritem; 
 private ArrayList<Item> arrListItems;
 private boolean isEditMode=false;
 private Button btnEdit,btnClearAll;
 private TextView txtNoitemfound;

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

  txtNoitemfound = (TextView) findViewById(R.id.txtNoFound);
  listviewitems = (ListView) findViewById(R.id.lstviewitems);

  //Add Some items in arraylist................
  arrListItems=new ArrayList<Item>();  
  for (int i = 0; i < 10; i++) 
  {
   Item favourite=new Item();
   favourite.setTitle("Item "+ i);
   arrListItems.add(favourite);
  }


  //Fill data into listview.............
  if(arrListItems.size()>0)
  {
   adapteritem=new ItemAdapter(MainActivity.this, arrListItems);
   listviewitems.setAdapter(adapteritem);
  }
  else
  {
   txtNoitemfound.setVisibility(View.VISIBLE);
   listviewitems.setVisibility(View.GONE); 
   btnEdit.setVisibility(View.INVISIBLE);
   btnClearAll.setVisibility(View.INVISIBLE);

  }

  //Edit Mode for delete item.............................
  btnEdit=(Button) findViewById(R.id.btnEdit);  
  btnEdit.setOnClickListener(new OnClickListener() 
  {

   @Override
   public void onClick(View v) 
   {
    if(arrListItems.size()>0)
    {
     if(btnEdit.getText().toString().trim().equalsIgnoreCase("Edit"))
     {     
      isEditMode=true;
      btnEdit.setText("Done");
      adapteritem.notifyDataSetChanged();
     }
     else
     {     
      isEditMode=false;
      btnEdit.setText("Edit");
      adapteritem.notifyDataSetChanged();
     }
    }
   }
  });

  //Clear All item from Listview............................
  btnClearAll=(Button) findViewById(R.id.btnClearAll);  
  btnClearAll.setOnClickListener(new OnClickListener() 
  {

   @Override
   public void onClick(View v) 
   {    
    if(arrListItems.size()>0)
     removeAllitemsFromList();
   }
  });

 }


 //FavouriteAdapter.......................................
 public class ItemAdapter extends BaseAdapter
 {
  private LayoutInflater lyt_Inflater = null;

  private ArrayList<Item> arrlstitems;
  private Context context;

  public ItemAdapter(Context cnt,ArrayList<Item> items)
  {
   this.context=cnt;
   this.arrlstitems = items;
  }


  @Override
  public int getCount()
  {                   
   return arrlstitems.size();
  }

  @Override
  public Object getItem(int position)
  {                   
   return null;
  }

  @Override
  public long getItemId(int position)
  {                   
   return 0;
  }

  @Override
  public View getView(final int position, View convertView, ViewGroup parent)
  {
   View view_lyt = convertView;
   try
   {     
    if(arrlstitems.size()>0)
    {                                
     final Item item =arrlstitems.get(position);
     String Name=item.getTitle();                           

     lyt_Inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                        
     view_lyt = lyt_Inflater.inflate(R.layout.row_item, null);

     TextView txtnm=(TextView) view_lyt.findViewById(R.id.txtTitle); 
     ImageButton imgbtnDelete=(ImageButton) view_lyt.findViewById(R.id.imgbtnDelete);
     txtnm.setText(Name);            

     if(isEditMode)
     {
      imgbtnDelete.setVisibility(View.VISIBLE);
     }
     else
     {
      imgbtnDelete.setVisibility(View.GONE);
     }

     view_lyt.setOnClickListener(new OnClickListener()
     {                         
      @Override
      public void onClick(View v)
      {            


      }
     });          
     imgbtnDelete.setOnClickListener(new OnClickListener() 
     {

      @Override
      public void onClick(View v) 
      {  
       if(arrListItems.size()>0)
        removeItemFromList(position);
      }
     });

    }

   }
   catch (Exception e)
   {
    Log.i("Exception==", e.toString());
   }                         

   return view_lyt;
  }
 }

 // Method for remove Single item from list 
 protected void removeItemFromList(int position) 
 {
  final int deletePosition = position;

  AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  builder.setTitle("Alert!");
  builder.setMessage("Do you want delete this item?")
  .setCancelable(false)
  .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
  {
   public void onClick(DialogInterface dialog, int id) 
   {
    arrListItems.remove(deletePosition);
    adapteritem.notifyDataSetChanged();
    adapteritem.notifyDataSetInvalidated();

    if(arrListItems.size()==0)
    {
     txtNoitemfound.setVisibility(View.VISIBLE);
     listviewitems.setVisibility(View.GONE);
     btnEdit.setVisibility(View.INVISIBLE);
     btnClearAll.setVisibility(View.INVISIBLE);
    }
   }
  })
  .setNegativeButton("No",new DialogInterface.OnClickListener() 
  {
   public void onClick(DialogInterface dialog,int id) 
   {
    dialog.cancel();
   }
  });
  AlertDialog  alertDialog = builder.create();   
  alertDialog.show();  

 }
 // Method for remove Single item from list 
 protected void removeAllitemsFromList() 
 { 

  AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  builder.setTitle("Alert!");
  builder.setMessage("Do you want delete all this items?")
  .setCancelable(false)
  .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
  {
   public void onClick(DialogInterface dialog, int id) 
   {

    arrListItems.removeAll(arrListItems);
    adapteritem.notifyDataSetChanged();
    adapteritem.notifyDataSetInvalidated();

    if(arrListItems.size()==0)
    {
     txtNoitemfound.setVisibility(View.VISIBLE);
     listviewitems.setVisibility(View.GONE);
     btnEdit.setVisibility(View.INVISIBLE);
     btnClearAll.setVisibility(View.INVISIBLE);
    }


   }
  })
  .setNegativeButton("No",new DialogInterface.OnClickListener() 
  {
   public void onClick(DialogInterface dialog,int id) 
   {
    dialog.cancel();
   }
  });
  AlertDialog  alertDialog = builder.create();   
  alertDialog.show();

 } 
}

you may like swipe delete in listview click here

I will be happy if you will provide your feedback or follow this blog. Any suggestion and help will be appreciated.
Thank you :)