Android 使用菜单关闭警报对话框

Android 使用菜单关闭警报对话框,android,android-dialog,android-dialogfragment,Android,Android Dialog,Android Dialogfragment,我有一个带有一些项目的警报对话框。我需要在用户单击菜单按钮时关闭对话框,而不提供任何关闭选项。我该怎么做 这是我的密码 CharSequence[] cs = ques_cat.toArray(new CharSequence[ques_cat.size()]); finalCharSequence[]css=ques_catidtoArray(newCharSequence[ques_catid.size()]); AlertDialog.Builder builder = new Aler

我有一个带有一些项目的警报对话框。我需要在用户单击菜单按钮时关闭对话框,而不提供任何关闭选项。我该怎么做

这是我的密码

CharSequence[] cs = ques_cat.toArray(new CharSequence[ques_cat.size()]);
finalCharSequence[]css=ques_catidtoArray(newCharSequence[ques_catid.size()]);

AlertDialog.Builder builder = new AlertDialog.Builder(Gropinion_Questions.this);
builder.setTitle("Choose Category");
builder.setItems(cs, new DialogInterface.OnClickListener()  {
    public void onClick(DialogInterface dialog, int item) {
        String ss = css[item].toString();
        getSubCat(ss);
    }
});
AlertDialog alert = builder.create();
alert.show();

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater=getMenuInflater();
    menuInflater.inflate(R.menu.activity_main, menu);
    if(alert !=null && alert.isShowing())
        alert.dismiss();
    return true;
}

在主机活动中,您需要检查用户是否已进入菜单并关闭其中的对话框:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    yourDialog.dismiss();
    return true;
}
或者,您可以通过将以下内容添加到主活动中来截获“按下菜单键”事件:

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        if (yourDialog != null && yourDialog.isVisible()) {
            yourDialog.dismiss();
        }
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}

因为OP希望关闭当前随菜单按钮显示的对话框。我相信以下是他想要的。解决方案在模拟器中进行了测试

void buildDialog(){
    AlertDialog alert = new AlertDialog.Builder(getActivity()).create();  
    alert.setCancelable(false);
    alert.setTitle("Close with menu button");  

        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_MENU) { 
                dialog.dismiss();
                return true;
            }
            return false;
        }
    });
    alert.show();
}