MENU 菜单技术详解
来源:互联网 发布:内窥镜软件an97apk 编辑:程序博客网 时间:2024/05/16 06:12
package com.yarin.android.MyContacts;
import android.app.ListActivity;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MyContacts extends ListActivity
{
private static final String TAG = "MyContacts";
private static final int AddContact_ID = Menu.FIRST;
private static final int EditContact_ID = Menu.FIRST+1;
private static final int DELEContact_ID = Menu.FIRST+2;
private static final int EXITContact_ID = Menu.FIRST+3;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
Intent intent = getIntent();
if (intent.getData() == null) {
Log.v(TAG, "getdata null ");
intent.setData(ContactsProvider.CONTENT_URI);
}
getListView().setOnCreateContextMenuListener(this);
getListView().setBackgroundResource(R.drawable.bg);
Log.v(TAG, "oncreate ");
Cursor cursor = managedQuery(getIntent().getData(), ContactColumn.PROJECTION, null, null,null);
//注册每个列表表示形式 :姓名 + 移动电话
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor,
new String[] {ContactColumn.NAME, ContactColumn.MOBILENUM },
new int[] { android.R.id.text1, android.R.id.text2 });
setListAdapter(adapter);
}
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
Log.v(TAG, "onCreateOptionsMenu");
//添加联系人
menu.add(0, AddContact_ID, 0, R.string.add_user)
.setShortcut('3', 'a')
.setIcon(R.drawable.add);
//动态添加菜单技术
Intent intent = new Intent(null, getIntent().getData());
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0,
new ComponentName(this, MyContacts.class), null, intent, 0, null);
//退出程序
menu.add(0, EXITContact_ID, 0, R.string.exit)
.setShortcut('4', 'd')
.setIcon(R.drawable.exit);
return true;
}
//处理菜单操作
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case AddContact_ID:
//添加联系人
startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));
return true;
case EXITContact_ID:
//退出程序
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
final boolean haveItems = getListAdapter().getCount() > 0;
Log.v(TAG, "onPrepareOptionsMenu");
if (haveItems)
{
Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());
Log.v(TAG, uri.toString());
Intent[] specifics = new Intent[2];
specifics[0] = new Intent(Intent.ACTION_EDIT, uri);
specifics[1] = new Intent(Intent.ACTION_VIEW, uri);
MenuItem[] items = new MenuItem[2];
//添加满足条件的菜单,当按下菜单之后,intent的是specifics[0] 和 specifics[1]要启动的activity
Intent intent = new Intent(null, uri);
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);
if (items[0] != null)
{
//编辑联系人
items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);
}
if (items[1] != null)
{
//查看联系人
items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);
}
}
else
{//没有项目即去掉添加的菜单
menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);
}
return true;
}
//动态菜单处理
//点击的默认操作也可以在这里处理
protected void onListItemClick(ListView l, View v, int position, long id)
{
Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
String action = getIntent().getAction();
if ( Intent.ACTION_EDIT.equals(action) )
{
//编辑联系人
startActivity(new Intent(Intent.ACTION_EDIT, uri));
}
else
{
//查看联系人
startActivity(new Intent(Intent.ACTION_VIEW, uri));
}
}
//长按界面触发的菜单
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
{
AdapterView.AdapterContextMenuInfo info;
try
{
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
}
catch (ClassCastException e)
{
return;
}
//得到长按的数据项
Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
if (cursor == null)
{
return;
}
//设置上下文菜单的标题为日志标题
menu.setHeaderTitle(cursor.getString(1));
//添加删除菜单
menu.add(0, DELEContact_ID, 0, R.string.delete_user);
}
// 对于上下文菜单项选中的事件处理,是通过重载onContextItemSelected实现的。
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterView.AdapterContextMenuInfo info;
try
{
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
}
catch (ClassCastException e)
{
return false;
}
switch (item.getItemId())
{
case DELEContact_ID:
{
//删除一条记录
Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);
getContentResolver().delete(noteUri, null, null);
return true;
}
}
return false;
}
}
import android.app.ListActivity;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MyContacts extends ListActivity
{
private static final String TAG = "MyContacts";
private static final int AddContact_ID = Menu.FIRST;
private static final int EditContact_ID = Menu.FIRST+1;
private static final int DELEContact_ID = Menu.FIRST+2;
private static final int EXITContact_ID = Menu.FIRST+3;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
Intent intent = getIntent();
if (intent.getData() == null) {
Log.v(TAG, "getdata null ");
intent.setData(ContactsProvider.CONTENT_URI);
}
getListView().setOnCreateContextMenuListener(this);
getListView().setBackgroundResource(R.drawable.bg);
Log.v(TAG, "oncreate ");
Cursor cursor = managedQuery(getIntent().getData(), ContactColumn.PROJECTION, null, null,null);
//注册每个列表表示形式 :姓名 + 移动电话
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor,
new String[] {ContactColumn.NAME, ContactColumn.MOBILENUM },
new int[] { android.R.id.text1, android.R.id.text2 });
setListAdapter(adapter);
}
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
Log.v(TAG, "onCreateOptionsMenu");
//添加联系人
menu.add(0, AddContact_ID, 0, R.string.add_user)
.setShortcut('3', 'a')
.setIcon(R.drawable.add);
//动态添加菜单技术
Intent intent = new Intent(null, getIntent().getData());
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0,
new ComponentName(this, MyContacts.class), null, intent, 0, null);
//退出程序
menu.add(0, EXITContact_ID, 0, R.string.exit)
.setShortcut('4', 'd')
.setIcon(R.drawable.exit);
return true;
}
//处理菜单操作
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case AddContact_ID:
//添加联系人
startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));
return true;
case EXITContact_ID:
//退出程序
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onPrepareOptionsMenu(Menu menu)
{
super.onPrepareOptionsMenu(menu);
final boolean haveItems = getListAdapter().getCount() > 0;
Log.v(TAG, "onPrepareOptionsMenu");
if (haveItems)
{
Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());
Log.v(TAG, uri.toString());
Intent[] specifics = new Intent[2];
specifics[0] = new Intent(Intent.ACTION_EDIT, uri);
specifics[1] = new Intent(Intent.ACTION_VIEW, uri);
MenuItem[] items = new MenuItem[2];
//添加满足条件的菜单,当按下菜单之后,intent的是specifics[0] 和 specifics[1]要启动的activity
Intent intent = new Intent(null, uri);
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);
if (items[0] != null)
{
//编辑联系人
items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);
}
if (items[1] != null)
{
//查看联系人
items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);
}
}
else
{//没有项目即去掉添加的菜单
menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);
}
return true;
}
//动态菜单处理
//点击的默认操作也可以在这里处理
protected void onListItemClick(ListView l, View v, int position, long id)
{
Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
String action = getIntent().getAction();
if ( Intent.ACTION_EDIT.equals(action) )
{
//编辑联系人
startActivity(new Intent(Intent.ACTION_EDIT, uri));
}
else
{
//查看联系人
startActivity(new Intent(Intent.ACTION_VIEW, uri));
}
}
//长按界面触发的菜单
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
{
AdapterView.AdapterContextMenuInfo info;
try
{
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
}
catch (ClassCastException e)
{
return;
}
//得到长按的数据项
Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
if (cursor == null)
{
return;
}
//设置上下文菜单的标题为日志标题
menu.setHeaderTitle(cursor.getString(1));
//添加删除菜单
menu.add(0, DELEContact_ID, 0, R.string.delete_user);
}
// 对于上下文菜单项选中的事件处理,是通过重载onContextItemSelected实现的。
@Override
public boolean onContextItemSelected(MenuItem item)
{
AdapterView.AdapterContextMenuInfo info;
try
{
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
}
catch (ClassCastException e)
{
return false;
}
switch (item.getItemId())
{
case DELEContact_ID:
{
//删除一条记录
Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);
getContentResolver().delete(noteUri, null, null);
return true;
}
}
return false;
}
}
- MENU 菜单技术详解
- android Menu菜单详解
- Android menu菜单详解
- Anroid的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- Android的onCreateOptionsMenu()创建菜单Menu详解
- 顶级程序员的10条最佳实践
- HDU: 1201-18岁生日
- 你会做Web上的用户登录功能吗?
- 只有渴望成功像渴望呼吸一样的人才会成功
- OpenSSL命令---pkcs8
- MENU 菜单技术详解
- iOS 7中的一些小修改
- C#中Hashtable的用法
- 关于中文乱码
- C++_友元函数
- OpenSSL命令---pkcs12
- Mac 上的屏幕录像工具?QuickTime Player!
- 二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度
- 由浅入深探究mysql索引结构原理、性能分析与优化