我在这里呈现出 AlertDialog
通过pressing菜单键和显示弹出对话框
,但当我试图 dissmiss
对话框由$ p $再次pssing菜单键第二次它似乎菜单键
不触发。
这是我的code此
@燮pressLint({NewApi,NewApi,NewApi,NewApi}) @覆盖 公共布尔的onkeydown(INT键code,KeyEvent的事件){ AlertDialog.Builder alertDialogBuilder =新AlertDialog.Builder(背景); 如果(键code == KeyEvent.KEY code_MENU&放大器;&安培; event.getAction()== 0){ 如果(!打开){ showDialogItem(); 开放= TRUE; } 否则,如果(打开){ alertDialog.dismiss( 开放= FALSE; }返回true; } 返回super.onKeyDown(键code,事件); } 公共无效showDialogItem(){ AlertDialog.Builder alertDialogBuilder =新AlertDialog.Builder(背景); alertDialogBuilder .setItems(R.array.select_dialog_items,新DialogInterface.OnClickListener() { 公共无效的onClick(DialogInterface对话,诠释它){ 。的String []项目= getResources()getStringArray(R.array.select_dialog_items); 新AlertDialog.Builder(MainActivity.this) .setMessage(您选择:这+ +,+项目[它]) 。显示(); } }); alertDialog = alertDialogBuilder.create(); WindowManager.LayoutParams LP =新WindowManager.LayoutParams();LP = alertDialog.getWindow()的getAttributes()。 lp.gravity = Gravity.TOP | Gravity.LEFT; lp.x = -300;lp.gravity = Gravity.BOTTOM; 。alertDialog.getWindow()setAttributes(LP); alertDialog.show(); alertDialog.getWindow()的setLayout(130,220)。 }
解决方案
得到这个初始化公共静态INT X = 0;公共布尔的onkeydown(INT键code,KeyEvent的事件){如果(键code == KeyEvent.KEY code_MENU&放大器;&安培; event.getAction()== 0){AlertDialog.Builder建设者=新AlertDialog.Builder(本).setOnKeyListener(新DialogInterface.OnKeyListener(){ @覆盖 公共布尔安其(DialogInterface对话,诠释关键code,KeyEvent的事件){ 如果(键code == KeyEvent.KEY code_MENU&放大器;&安培; event.getAction()== 0){ 如果(X == 1) { alert.dismiss(); X = 0; } 返回true; } 返回false; } });如果(X == 0){builder.setMessage(登录信息修改成功......);建设者.setCancelable(真);builder.setPositiveButton(OK,新DialogInterface.OnClickListener(){公共无效的onClick(DialogInterface对话,诠释的id){ System.exit(0); } }); 警报= builder.create(); alert.show(); X = 1; } 返回true; }
Here I am showing a AlertDialog
By pressing a menu key and its displaying the popup dialogs
but when i am trying to dissmiss
the dialog by pressing the menu key again 2nd time its seems the menu key
doesn't triggered.
here is my code for this
@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" })
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
if (keyCode == KeyEvent.KEYCODE_MENU && event.getAction() == 0 ) {
if(!open){
showDialogItem();
open=true;
}
else if(open){
alertDialog.dismiss(
open =false;
}return true;
}
return super.onKeyDown(keyCode, event);
}
public void showDialogItem(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {
String[] items = getResources().getStringArray(R.array.select_dialog_items);
new AlertDialog.Builder(MainActivity.this)
.setMessage("You selected: " + which + " , " + items[which])
.show();
}
});
alertDialog = alertDialogBuilder.create();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp = alertDialog.getWindow().getAttributes();
lp.gravity = Gravity.TOP | Gravity.LEFT;
lp.x=-300;
lp.gravity=Gravity.BOTTOM;
alertDialog.getWindow().setAttributes(lp);
alertDialog.show();
alertDialog.getWindow().setLayout(130, 220);
}
解决方案
Got this initialize
public static int x=0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && event.getAction() == 0 )
{
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setOnKeyListener(new DialogInterface.OnKeyListener()
{
@Override
public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_MENU && event.getAction() == 0)
{
if(x==1)
{
alert.dismiss();
x=0;
}
return true;
}
return false;
}
});
if(x==0)
{
builder.setMessage("Login details Changed Successfully...");
builder .setCancelable(true);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
System.exit(0);
}
});
alert = builder.create();
alert.show();
x=1;
}
return true;
}