Android ListView上的ContextMenu

我们常常会遇到这种需求——在一个列表的一项上加上修改、删除、标记等的操作,最常用的手法自然是长按这一项来弹出一个ContextMenu来提供这些功能了。但是有一个很重要的问题——如何获得当前列表上的位置呢?这个listview的contextMenu上的位置是一个比较隐蔽的属性,下面我通过一个小例子来说明。

首先,是这个Activity声明部分,这个很简单,就是一个ListView,然后给其注册一个ContextMenu。

public class PwdListActivity extends Activity implements OnClickListener {

	private ListView listv;
	private BaseAdapter adapter;
	private List<account> accountlist;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_pwdlist);
		
		listv = (ListView) findViewById(R.id.listview);
		
		listv.setOnItemClickListener(new MonItemClickListener());
		registerForContextMenu(listv);
	}

然后我们要写这个ContextMenu的创建和点击方法。

@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		getMenuInflater().inflate(R.menu.pwditem_menu, menu);
		super.onCreateContextMenu(menu, v, menuInfo);
	}

到这里都和普通的ContextMenu无异,下面是其选择方法——

@Override
	public boolean onContextItemSelected(MenuItem item) {
		int position=((AdapterContextMenuInfo) item.getMenuInfo()).position;
		account acc=accountlist.get(position);
		switch (item.getItemId()) {
		case R.id.edit:
			Intent inedit = new Intent(this, EditAccoutActivity.class);
			inedit.putExtra("edit", acc.getId());
			startActivity(inedit);
			break;
		case R.id.delete:
			Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("确定删除?").setMessage("点击确定删除该账户信息")
					.setPositiveButton("确定", new MPositiveOnClickListener(acc))
					.setNegativeButton("取消", null);
			builder.create().show();
			break;
		case R.id.viewpwd:
			String shadow = acc.getShadow();
			ToastUtils.show(PwdListActivity.this, AES.dec(shadow));
			break;
		default:
			break;
		}
		return super.onContextItemSelected(item);
	}

这个方法最重要的是方法体第一行,ListView上的MenuInfo可以通过强转成AdapterContextMenuInfo来提取其成员变量position,而这个position指示的正是当前item对应listview中的位置,有此方法,我们的功能就能很方便地实现了。剩下的代码就不贴了^_^因为重点已经出来了~


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值