onContextItemSelected不会被调用

DNe*_*ell 3 android contextmenu android-alertdialog

我创建了一个简单的应用程序,只显示一个AlertDialog,列表中有四个项目.我注册了一个上下文菜单.当我长按其中一个项目时,我会看到上下文菜单.然后我从上下文菜单中选择一个项目,但onContextItemSelected永远不会被调用.有帮助吗?谢谢.

test.java:

package com.cerulean.tech.creations.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;

public class test extends Activity {

    private String[] files;
    AlertDialog alert;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        files = new String[4];
    }

    public void selectScheme(View v) {
        files[0] = "<New Scheme>";
        files[1] = "test1";
        files[2] = "test2";
        files[3] = "test3";
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setItems(files, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int item) {
                   }});  
        alert = builder.create();
        alert.show();
        registerForContextMenu(alert.getListView());
    }


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("Context Menu");
        menu.add(0, v.getId(), 0, "Delete");
        menu.add(0, v.getId(), 0, "Cancel");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在main.xml中,我只是一个用android定义的按钮:onClick ="selectScheme"

小智 9

在此之后:

    registerForContextMenu(alert.getListView());
Run Code Online (Sandbox Code Playgroud)

输入:

    alert.getListView().setOnCreateContextMenuListener(this);
Run Code Online (Sandbox Code Playgroud)

而不是onContextItemSelected(MenuItem item)函数使用这个:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem menuItem) {
Run Code Online (Sandbox Code Playgroud)