如何使此ContextMenu项目可单击并向项目添加操作?

时间:2014-01-13 13:40:05

标签: android contextmenu android-adapterview

我从数据库中获取了一些信息,并创建了一个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");

}
}

3 个答案:

答案 0 :(得分:1)

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

menu.add("Call")

类似

menu.add(MenuItem.NONE, CALL_ITEM_ID, MenuItem.NONE, "Call");

(两个NONE指的是项目的分组和排序 - 参见http://developer.android.com/reference/android/view/Menu.html#add(int,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;
    }
});

答案 1 :(得分:0)

试试这个 创建菜单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>

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {

        getActivity().getMenuInflater().inflate(R.menu.image_options, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
}

然后

@Override
    public boolean onContextItemSelected(android.view.MenuItem item)
    {

        switch (item.getItemId())
        {
        case R.id.pick_camera:
            Log.i("MainActivity", "CAM Activity launching");

            break;
        case R.id.pick_gallery:
        {

        }
            break;
        }

        return super.onContextItemSelected(item);
    }

如果你没有在片段中使用它,请从上面删除getActivity()。

答案 2 :(得分:0)

这就是我们如何做到的.. 你需要打电话给这个方法。

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

}

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