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:- Register the
View
to which the context menu should be associated by callingregisterForContextMenu()
and pass it theView
. Here we have used Context Menu with ListView - Implement the
onCreateContextMenu()
method in yourActivity
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;
}
}
}
No comments:
Post a Comment