ContextMenu上下文菜单

 

上下文菜单一般是真针对ListView(多条数据的操作)

  需求:在ListView中显示通话记录的电话号码,长按显示的上下文菜单为复制号码到拨号盘、发送信息、复制号码,与之相对应的事件。

  ContextMenu上下文菜单

 

布局代码:

  

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2     android:layout_width="match_parent"

 3     android:layout_height="match_parent"

 4     android:orientation="vertical" >

 5 

 6     <ListView

 7         android:id="@+id/listview"

 8         android:layout_width="fill_parent"

 9         android:layout_height="fill_parent" />

10 

11 </LinearLayout>

MainActivity

  1 package com.android.hzy.contextmenu;

  2 import android.app.Activity;

  3 import android.content.Context;

  4 import android.content.Intent;

  5 import android.database.Cursor;

  6 import android.graphics.Color;

  7 import android.net.Uri;

  8 import android.os.Bundle;

  9 import android.provider.CallLog.Calls;

 10 import android.text.ClipboardManager;

 11 import android.view.ContextMenu;

 12 import android.view.ContextMenu.ContextMenuInfo;

 13 import android.view.MenuItem;

 14 import android.view.View;

 15 import android.view.ViewGroup;

 16 import android.widget.AdapterView.AdapterContextMenuInfo;

 17 import android.widget.CursorAdapter;

 18 import android.widget.ListView;

 19 import android.widget.TextView;

 20 

 21 public class MainActivity extends Activity {

 22 

 23     private static final int MENU_DIAL_ID = 0;

 24     private static final int MENU_SMS_ID = 1;

 25     private static final int MENU_COPY_ID = 2;

 26     private ListView listview;

 27     private MyAdapter adapter;

 28     

 29     @Override

 30     protected void onCreate(Bundle savedInstanceState) {

 31         super.onCreate(savedInstanceState);

 32         setContentView(R.layout.activity_main);

 33         

 34         listview = (ListView) findViewById(R.id.listview);

 35         Cursor c = getContentResolver().query(Calls.CONTENT_URI, new String[]{Calls._ID,Calls.NUMBER}, null, null, null);

 36         adapter = new MyAdapter(this, c);

 37         // 如果数据是来自于手机本身的数据库   使用CursorAdapter的子类

 38         listview.setAdapter(adapter);

 39         

 40         // 给listview注册上下文菜单

 41         registerForContextMenu(listview);

 42     }

 43 

 44     /**

 45      * 创建上下文菜单

 46      */

 47     @Override

 48     public void onCreateContextMenu(ContextMenu menu, View v,

 49             ContextMenuInfo menuInfo) {

 50         // TODO Auto-generated method stub

 51         menu.add(0, MENU_DIAL_ID, 0, "复制号码到拨号盘");

 52         menu.add(0, MENU_SMS_ID, 0, "发送短信");

 53         menu.add(0, MENU_COPY_ID, 0, "复制号码");

 54         super.onCreateContextMenu(menu, v, menuInfo);

 55     }

 56     

 57     /**

 58      * 上下文菜单被选择

 59      */

 60     @Override

 61     public boolean onContextItemSelected(MenuItem item) {

 62         // TODO Auto-generated method stub

 63         AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();

 64         int position = acmi.position;

 65         Cursor cursor = (Cursor) adapter.getItem(position);

 66         String number = cursor.getString(cursor.getColumnIndex(Calls.NUMBER)); 

 67         

 68         int id = item.getItemId();

 69         Intent intent = null;

 70         switch (id) {

 71         case MENU_DIAL_ID:

 72             intent = new Intent();

 73             intent.setAction(Intent.ACTION_DIAL);

 74             intent.setData(Uri.parse("tel:"+number));

 75             startActivity(intent);

 76             break;

 77             

 78         case MENU_SMS_ID:

 79             intent = new Intent();

 80             intent.setAction(Intent.ACTION_SENDTO);

 81             intent.setData(Uri.parse("smsto:"+number));

 82             startActivity(intent);

 83             break;

 84             

 85         case MENU_COPY_ID:

 86             // 得到剪贴版服务

 87             ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

 88             // 将内容放到剪贴版本中

 89             cm.setText(number);

 90             break;

 91 

 92         default:

 93             break;

 94         }

 95         return super.onContextItemSelected(item);

 96     }

 97     

 98     private final class MyAdapter extends CursorAdapter{

 99 

100         public MyAdapter(Context context, Cursor c) {

101             super(context, c);

102             // TODO Auto-generated constructor stub

103         }

104 

105         // 创建item的布局

106         @Override

107         public View newView(Context context, Cursor cursor, ViewGroup parent) {

108             // TODO Auto-generated method stub

109             TextView tv = new TextView(context);

110             tv.setTextSize(22);

111             tv.setTextColor(Color.WHITE);

112             

113             return tv;

114         }

115 

116         // 绑定数据

117         @Override

118         public void bindView(View view, Context context, Cursor cursor) {

119             // TODO Auto-generated method stub

120             // 得到数据 电话号码

121             String number = cursor.getString(cursor.getColumnIndex(Calls.NUMBER));

122             TextView tv = (TextView) view;

123             tv.setText(number);

124         }

125         

126     }

127 }

注:清单文件中需要添加权限

<uses-permission android:name="android.permission.READ_CONTACTS"/>

 

 

 
 
 

你可能感兴趣的:(contextMenu)