0

我有一个包含一些项目的警报对话框。当用户单击菜单按钮而不提供任何关闭选项时,我需要关闭对话框。我怎样才能做到这一点?

这是我的代码

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;
}
4

2 回答 2

0

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

@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);
    }
}
于 2013-07-11T06:36:59.383 回答
0

由于 OP 想要关闭当前使用 MENU 按钮显示的对话框。我相信以下是他想要的。解决方案在模拟器中进行测试。

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();
}
于 2013-07-11T06:58:15.693 回答