Showing posts with label Context Menu. Show all posts
Showing posts with label Context Menu. Show all posts

Sunday 2 November 2014

Android Tutorial 24 : Working With Menu: Creating Context Menu In Android

Context Menu 

A context menu provides actions that affect a specific item or context frame in the UI.
Context Menu appears when user long press on a View like ListView, GridView etc.


For Ex:  Below Is Context menu  registerd with List View
When A User long Press on a contacts he/she gets two option Call and SMS through Context Menu.









Creating a  context menu

To create a context menu:
  1. Register the View to which the context menu should be associated by calling registerForContextMenu() and pass it the ViewHere we have used Context Menu with ListView
  2. Implement the onCreateContextMenu() method in your Activity When the registered view receives a long-click event, the system calls your onCreateContextMenu()method. This is where you define the menu items, usually by inflating a menu resource.

1:  Registering The View(here List View)  for Context menu.


We have to register the ListView for ContextMenu in onCreate  method


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

              
                    listViewSmartContacts=(ListView)findViewById(R.id.listSmartContacts);                    
                    contactListAdapter=new ContactListAdapter(this);
                    listViewSmartContacts.setAdapter(contactListAdapter);

       
                    // Register the ListView  for Context menu
                    registerForContextMenu(listViewSmartContacts);
       }

2: Implement the onCreateContextMenu()


When the registered view receives a long-click event, the system calls youronCreateContextMenu() method. 

             @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
            {
                    super.onCreateContextMenu(menu, v, menuInfo);
                    menu.setHeaderTitle("Select The Action"); 
                    menu.add(0, v.getId(), 0, "Call"); 
                    menu.add(0, v.getId(), 0, "Send SMS");
    
            } 


MenuInflater allows you to inflate the context menu from a menu resource 

3: Implement onContextItemSelected method



When the user selects a menu item, the system calls this method so you can perform the appropriate action.


             @Override 
            public boolean onContextItemSelected(MenuItem item)
            { 


                        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
                       
                //  
info.position will give the index of selected item
                           intIndexSelected=info.position              
                                if(item.getTitle()=="Call")
                                {
                
                                   // Code to execute when clicked on This Item

                                } 
                                else if(item.getTitle()=="Send SMS")
                                {
                                   

                                  // Code to execute when clicked on This Item                                                        } 
                                else
                                {

                                    return false;
                                } 
                                return true; 
                       
                                   

              } 
             



The Complete Code:


package com.mtracker;

import com.mtracker.R;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;


public class ShowSmartContactsActivity extends Activity
{
  
      
            ListView listViewSmartContacts;
            ContactListAdapter  contactListAdapter;
            //ArrayList<String> numberList;
           
            String number;
           
            public ShowSmartContactsActivity()
            {
                /// numberList=new ArrayList<String>();
           
            }
            @Override
            public void onCreate(Bundle savedInstanceState)
            {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.show_contacts);
       
                   
                    LinearLayout layoutContacts=(LinearLayout)findViewById(R.id.layoutSmartContacts);
                    int APILevel=android.os.Build.VERSION.SDK_INT ;
                    if(APILevel>=14)
                    {
                        layoutContacts.setBackgroundResource(R.color.Default);
                    }
                   
                    listViewSmartContacts=(ListView)findViewById(R.id.listSmartContacts);
                    //getList();
                    contactListAdapter=new ContactListAdapter(this);
                    listViewSmartContacts.setAdapter(contactListAdapter);
      
                                      
                   
                    registerForContextMenu(listViewSmartContacts);
            }
           
           
           
           
           
   
           
      
      
           
               
   
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
            {
                    super.onCreateContextMenu(menu, v, menuInfo);
                    menu.setHeaderTitle("Select The Action"); 
                    menu.add(0, v.getId(), 0, "Call"); 
                    menu.add(0, v.getId(), 0, "Send SMS");
    
            }

            @Override 
            public boolean onContextItemSelected(MenuItem item)
            { 


                        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
                        String number;
              
                        try
                        {
                                number=new ContactListAdapter(this).numberList.get(info.position);
                
               
                
                                if(item.getTitle()=="Call")
                                {
                
                
                                        Intent callIntent = new Intent(Intent.ACTION_CALL);
                                        callIntent.setData(Uri.parse("tel:"+number));
                                        startActivity(callIntent);
                
                
                
        

                                } 
                                else if(item.getTitle()=="Send SMS")
                                {
                                        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
                                        smsIntent.setType("vnd.android-dir/mms-sms");
                                        smsIntent.putExtra("address", number);
                                        startActivity(smsIntent);
                    

                                } 
                                else
                                {return false;} 
                                return true; 
                        }
                        catch(Exception e)
                        {
                                return true;
                        }
            }