Android 如何使此上下文菜单项可单击并向项添加操作?

Android 如何使此上下文菜单项可单击并向项添加操作?,android,contextmenu,android-adapterview,Android,Contextmenu,Android Adapterview,我从数据库中获取了一些信息,并创建了一个ArrayAdapter来显示这些信息。如果我点击一个项目,会出现一个菜单,其中包含四种可能的操作。但我不知道如何为这个菜单项添加操作侦听器 MySQLiteHelper db = new MySQLiteHelper(this); List<Client> list = db.getAllClients(); final ListView listview = (ListView) findViewById(

我从数据库中获取了一些信息,并创建了一个ArrayAdapter来显示这些信息。如果我点击一个项目,会出现一个菜单,其中包含四种可能的操作。但我不知道如何为这个菜单项添加操作侦听器

     MySQLiteHelper db = new MySQLiteHelper(this);

     List<Client> list = db.getAllClients(); 
     final ListView listview = (ListView) findViewById(R.id.listView_ID);

     final ArrayAdapter adapter = new ArrayAdapter(this,
     android.R.layout.simple_list_item_1, list);
     listview.setAdapter(adapter);

     registerForContextMenu(listview);
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v,   ContextMenu.ContextMenuInfo menuInfo) {
if (v.getId() == R.id.listView_ID) {
    ListView lv = (ListView) v;
    AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
    Object obj = (Object) lv.getItemAtPosition(acmi.position);

    menu.add("Call");
    menu.add("Email");
    menu.add("Edit");
    menu.add("Delete");

}
}
MySQLiteHelper db=新的MySQLiteHelper(这个);
List=db.getAllClient();
最终ListView ListView=(ListView)findViewById(R.id.ListView\u id);
最终ArrayAdapter适配器=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,list);
setAdapter(适配器);
registerForContextMenu(列表视图);
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
if(v.getId()==R.id.listView\u id){
ListView lv=(ListView)v;
AdapterView.AdapterContextMenuInfo acmi=(AdapterContextMenuInfo)菜单信息;
Object obj=(Object)lv.getItemAtPosition(acmi.position);
菜单。添加(“呼叫”);
菜单。添加(“电子邮件”);
菜单。添加(“编辑”);
菜单。添加(“删除”);
}
}
试试这个 创建菜单xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/pick_gallery"
        android:title="Choose from Gallery">
    </item>
    <item
        android:id="@+id/pick_camera"
        android:title="Use Camera">
    </item>

</menu>
然后


如果您没有在片段中使用它,请从上面删除getActivity()。。 您需要调用此方法

public void onButtonClickEvent(View caller)
{
registerForContextMenu(caller); 
openContextMenu(caller);
unregisterForContextMenu(caller);

}

您需要将按钮的onClick属性设置为onButtonClickeEvent。长时间单击不会触发上下文菜单,因为它在显示后立即被取消注册。

您可以在与
onCreateContextMenu
相同的类中实现
onContextItemSelected
,但您需要提供菜单项ID,因此请替换

menu.add("Call")
有点像

menu.add(MenuItem.NONE, CALL_ITEM_ID, MenuItem.NONE, "Call");
(两个
NONE
s表示项目的分组和排序-请参阅,int,int,java.lang.CharSequence)

那你就可以

public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case CALL_ITEM_ID:
        doCallStuff();
...

或者,
menu.add()
返回一个
MenuItem
,您可以在其中添加一个
OnMenuItemClickListener
,如下所示:

MenuItem callItem = menu.add("Call");
callItem.setOnMenuItemClickListener(new MenuItemOnClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
        // do whatever you want to do... 
        doCallStuff();
        // then return true to say you've handled this
        return true;
    }
});

如何定义此方法中的菜单项“呼叫”、“电子邮件”等才能工作?您可以在菜单xmlregisterForContextMenu(listview)中添加任意数量的项;我需要在那里
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case CALL_ITEM_ID:
        doCallStuff();
...
MenuItem callItem = menu.add("Call");
callItem.setOnMenuItemClickListener(new MenuItemOnClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
        // do whatever you want to do... 
        doCallStuff();
        // then return true to say you've handled this
        return true;
    }
});