Showing posts with label App-development. Show all posts
Showing posts with label App-development. Show all posts

2 May 2016

Handling Multiple Item Selection in A Listview - Android Tutorial

In this tutorial, we will learn how to respond when a user selects multiple list items in an Activity . For the purpose of this tutorial, I will be selecting multiple list items for deleting them from the database. This tutorial also covers on how to change listItem background color when the user selects multiple items.

Idea :

Listen to long press on a list item and store list id in an ArrayList if checked state is True, otherwise, if checked state is false then remove the item id from ArrayList.

pre-setup :

    Added a ListView to the layout file and attached a cursorAdepter with it.This how my final
listview looks like. 

If you are displaying list using values from the database, then make sure that the primary key name is "_id" in your database table.
Now follow below-given steps to listen for multiple list item selection
1. Set Global Variable
Context context;
private  ListView list;
private ArrayList list_item = new ArrayList<>(); // for holding list item ids
2. Change list CHOICE_MODE as follows
//(list) is my ListView           
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); // Important

3. Set MultiChoiceModeListener to your ListView variable
list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
                //capture total checked items
                checkedCount = list.getCheckedItemCount();

                //setting CAB title
                mode.setTitle(checkedCount + " Selected");

                //list_item.add(id);
                if(checked){
                    list_item.add(id);     // Add to list when checked ==  true
                }else {
                    list_item.remove(id);
                }

            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                //Inflate the CAB
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.contextual_menu, menu);
                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                final int deleteSize = list_item.size();
                      int itemId = item.getItemId();
                if(itemId == R.id.item_delete) {

                     for(long ids : list_item){
                            // Make proper check, if needed, before deletion 
                            String whereDelId = DBOpenHelper.COL_ID + "=" + ids;
                            int res = getContentResolver().delete(TripProvider.CONTENT_URI_START, whereDelId, null);
                            if(res == -1){
                               Log.d(TAG, "onActionItemClicked: Delete Failed for ID = "+ids);
                            }  
                     }

                }  
             Toast.makeText(context,deleteSize+" Items deleted",Toast.LENGTH_SHORT).show();

                checkedCount = 0;
                list_item.clear();
                mode.finish();
                return true;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                // refresh list after deletion
                displayDataList();
            }
        });

Changing background Color of Selected ListView List items.

4.   Create a drawable XML for list item background.{mine is, select_list_bg,xml}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:exitFadeDuration="@android:integer/config_shortAnimTime">
     <item  android:state_pressed="true"
         android:state_activated="true"
         android:drawable="@color/lightPink"></item>
    <item
        android:state_activated="true"
        android:drawable="@color/lightPink"></item>

    <item  android:drawable="@color/lightGreen"></item>
    <item android:state_enabled="true"
        android:drawable="@color/lightGreen"></item>
</selector>
5. Set above drawable as background to listItem
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/select_list_bg,xml"
    android:elevation="4dp">

 <!-- Your List item child views -->
</RelativeLayout>
This is the final look of the List when user selects multiple items.



15 Aug 2015

how to Learn Android App Development ?

For Learning Android Development, there are thousands of tutorial available online, But choosing one which explains concepts in a easy way is very difficult.

Today I am going to list out some of best online resources to learn Android Development,most of these Tutorial are available free of cost. And if you are new to android Development, then before going to any other Tutorial, I would suggest you to go through following Tutorials which very useful and conceptual tutorials.

  1. Android Development for Beginners - Udacity : Video Tutorial for Complete beginners.
  2. Training for Android developers - Web based Text Tutorial Covering Basic Concepts By Google.
If during going through above Tutorial you find some topics difficult to understand then Google for that particular topic.
After going through above Tutorials you can go for any other tutorial, like Android Essential Training from Lynda.com.
Best Way to learn is to Develop small Apps,which cover basic android concepts, while learning Android Development.

So in the upcoming posts in this series of Android Development i will be posting Ideas and Concepts for Developing simple android Apps.