Android ListView上的ContextMenu

来源:互联网 发布:淘宝直通车助手软件 编辑:程序博客网 时间:2024/04/30 18:20

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

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

public class PwdListActivity extends Activity implements OnClickListener {private ListView listv;private BaseAdapter adapter;private List<account> accountlist;@Overrideprotected 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的创建和点击方法。

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

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

@Overridepublic 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 0