当前位置:  开发笔记 > 编程语言 > 正文

如何在Android上的ListActivity中实现上下文菜单?

如何解决《如何在Android上的ListActivity中实现上下文菜单?》经验,为你挑选了3个好方法。

如何通过长按或触发使用内置布局和ListAdapter的ListActivity实现上下文菜单?



1> pupeno..:

在onCreate方法上调用registerForContextMenu,如下所示:

registerForContextMenu(getListView());

然后填充onCreateContextMenu上的菜单(ContextMenu菜单,View视图,ContextMenuInfo menuInfo).menuInfo参数可以提供有关以这种方式长按的项目的信息:

AdapterView.AdapterContextMenuInfo info;
try {
    info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return;
}
long id = getListAdapter().getItemId(info.position);

并以通常的方式调用menu.add添加菜单项:

menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string);

当用户选择一个选项时,会调用onContextItemSelected.同样 onMenuItemSelected并且在文档中没有明确解释这个事实,只是说你使用其他方法从上下文菜单接收调用; 请注意,不要共享ID.

在onContextItemSelected上,您可以通过调用getMenuInfo()来获取MenuInfo的ahold,从而得到所选项的id :

try {
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return false;
}
long id = getListAdapter().getItemId(info.position);


我知道ClassCastException防护代码出现在Google示例中,但我认为这可能是不必要的.MenuInfo有时可能只是AdapterContextMenuInfo - 它可能永远或永远不会.guard子句阻止应用程序崩溃,但无论如何你都有一个逻辑错误.我个人宁愿看到整个堆栈跟踪,但这只是我的偏好.

2> Romain Guy..:

您还应该查看Activity.registerForContextMenu(View).



3> Dhiral Pandy..:
listView = (ListView) findViewById(R.id.listpockets);
registerForContextMenu(listView);



public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) {
    //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(getString(R.string.titleDelete));   
    menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete));
};
@Override
public boolean onContextItemSelected(MenuItem item) {

    if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID)
    {
       AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
       long id = this.listView.getItemIdAtPosition(info.position);
       Log.d(TAG, "Item ID at POSITION:"+id);
    }
    else
    {
        return false;
    }
    return true;
}

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有