ListView与上下文菜单

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://splend.blog.51cto.com/3717743/965219

本文主要介绍采用ListView与上下文菜单的配合使用,其中主要是:通过ContentProvider获取手机中联系人列表然后用ListView的形式显示出来,通过ContextMenu操作ListView中的内容。其主要代码的实现如下:


   
   
package org.lxh.demo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class ContactsDemo extends Activity { /** 返回结果的游标 */ private Cursor result = null; /** 显示信息 */ private ListView contactsList = null; /** 存储数据信息 */ private List<Map<String, Object>> allContacts = null; /** 数据适配器 */ private SimpleAdapter simple = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); // 实例化ListView this.contactsList = (ListView) super.findViewById(R.id.contactsList); // 实例化游标 this.result = super.getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); // 将结果集交给容器管理 super.startManagingCursor(this.result); // 实例化List集合 this.allContacts = new ArrayList<Map<String, Object>>(); // 取出结果集中的每一个内容 for (this.result.moveToFirst(); !this.result.isAfterLast(); this.result .moveToNext()) { // 实例化HashMap Map<String, Object> contact = new HashMap<String, Object>(); // 存储一条记录 contact.put("_id", this.result.getInt(this.result .getColumnIndex(ContactsContract.Contacts._ID))); // 存储一条记录 contact.put("name", this.result.getString(this.result .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); // 向List中添加一条记录 this.allContacts.add(contact); } // 实例化数据适配器 this.simple = new SimpleAdapter(this, this.allContacts, R.layout.contacts, new String[] { "_id", "name" }, new int[] { R.id._id, R.id.name }); this.simple .setDropDownViewResource(android.R.layout.simple_list_item_checked); // 为ListView设置适配器 this.contactsList.setAdapter(this.simple); // 给ListView注册上下文菜单 super.registerForContextMenu(this.contactsList); } /** 上下文菜单被选中时触发的事件 */ @Override public boolean onContextItemSelected(MenuItem item) { // 实例化info进而通过info.position得到ListView中的那一项(id)被选中,从而生产上下文菜单并显示 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); int position = info.position; // 获取联系人的id String contactsId = this.allContacts.get(position).get("_id") .toString(); // 进行上下文菜单的操作 switch (item.getItemId()) { // 查看 case Menu.FIRST + 1: // 查询的条件 String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?"; // 查询条件所满足的值 String[] phoneSelectionArgs = new String[] { contactsId }; // 获得查询结果集 Cursor c = super.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, phoneSelection, phoneSelectionArgs, null); // 实例化StringBuffer StringBuffer buf = new StringBuffer(); buf.append("电话号码是:"); // 遍历查询的结果集 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { buf.append( c.getString(c .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))) .append("、"); } // 显示查询的结果 Toast.makeText(this, buf, Toast.LENGTH_SHORT).show(); break; // 删除 case Menu.FIRST + 2: //将所选定的项删除 super.getContentResolver().delete( Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactsId), null, null); // 删除集合数据项 this.allContacts.remove(position); // 通知adapter改变 this.simple.notifyDataSetChanged(); //显示结果 Toast.makeText(this, "数据已删除!", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** 长按某一条目时生成上下文菜单触发的事件 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // 创建菜单 //此处的View 为 ListView 此外我们可以通过 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; // 然后info.position来获取产生上下菜单的ListView中某个条目的id super.onCreateContextMenu(menu, v, menuInfo); // 设置上下文菜单的标题 menu.setHeaderTitle("联系人操作"); // 设置上下文菜单的选项"查看详情" menu.add(Menu.NONE, Menu.FIRST + 1, 1, "查看详情"); // 设置上下文菜单的选项"删除信息" menu.add(Menu.NONE, Menu.FIRST + 2, 1, "删除信息"); } }

其效果如下:

采用ListView显示联系人列表:

当长按ListView中的某一项时弹出上下文菜单:

当点击查看详情时弹出一个Toast

转载于:https://my.oschina.net/u/1014520/blog/182393

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值