Andriod常用Menu之一:ContextMenu

ContextMenu通过长摁某个View弹出的上下文菜单

1. 创建

android是通过长按某个视图元素来弹出上下文菜单的,通过setOnCreateContextMenuListener(this)来给一个控件设置上下文菜单事件,通常用于ListView和GrideView.
注意:给控件设置监听事件的时候传递this,并不需要像点击事件那样实现抽象方法,因为父类里本身就包含这个方法,只需要重写,进行自己的实现即可.

2.重写创建Contextmenu方法,实现加载自己的布局

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

getMenuInflater().inflate(R.menu.main_context_menu,menu)给创建的menu加载要显示的布局文件

下面来解释一下onCreateContextMenu的参数:
  • ContextMenu menu:要生成的menu对象
  • View v:被设置监听事件的对象,也就是触发创建menu的控件对象,比如listview
  • ContextMenu.ContextMenuInfo menuInfo :记录了触发控件的位置,id信息.如果使用在listview上要使用id或者position信息必须强转
    int position = ((AdapterView.AdapterContextMenuInfo) menuInfo).position;

3.给menu每个item添加点击事件,通过item 的id区分

 @Override
    public boolean onContextItemSelected(MenuItem item) {

        ContextMenu.ContextMenuInfo menuInfo;
        AdapterView.AdapterContextMenuInfo adapterContextMenuInfo;
        switch (item.getItemId()){
            case R.id.main_context_menu_delete:
                menuInfo = item.getMenuInfo();
                adapterContextMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;


                mDatabase.delete("table_pwd","_id=?",new String[]{String.format("%d",adapterContextMenuInfo.id)});
                refreshData();

                break;

            case R.id.main_context_menu_edit:
                adapterContextMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                long id = adapterContextMenuInfo.id;
                Intent intent = new Intent(this, EditActivity.class);
                intent.putExtra("id",id);
                startActivity(intent);
                break;

            case R.id.main_context_menu_openWeb:
                long webId = ((AdapterView.AdapterContextMenuInfo) item.getMenuInfo()).position;
                View childAt = mListview.getChildAt((int) webId);  //Long 强转int
                CharSequence text = ((TextView) ((GridLayout) childAt).getChildAt(4)).getText();  //从列表中获取网址
                if (text != null&&!"".equals(text.toString())) {
                    String web = text.toString();
                    web="http:/"+web;
//                    Toast.makeText(MainActivity.this, web, Toast.LENGTH_SHORT).show();
                    Intent intent1 = new Intent();
                    intent1.setAction(Intent.ACTION_VIEW);
                    intent1.setData(Uri.parse(web));
                    startActivity(intent1);

                }else {
                    Toast.makeText(MainActivity.this, "该条目不存在网址信息", Toast.LENGTH_SHORT).show();
                }
//                Toast.makeText(MainActivity.this, "id:"+webid, Toast.LENGTH_SHORT).show();
                break;

        }
        return super.onContextItemSelected(item);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值