0

在这里,我显示了一个AlertDialog通过按菜单键并显示弹出窗口dialogs,但是当我dissmiss第二次再次按菜单键尝试进入对话框时,它似乎 menu key没有触发。

这是我的代码

     @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);

    }
4

3 回答 3

1
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;

         }
于 2013-03-27T09:06:19.237 回答
0

这不会像您期望的那样工作,只是因为一旦打开对话框,它将拦截菜单键而不是底层活动。您可以解决它使用 AlertDialog。相反,您可以创建一个显示为对话框的活动:

然后从您的主要活动中,按下菜单按钮,开始此活动。在这个活动中,按下菜单按钮,你就完成了。

另一种选择是在对话框中添加一个键侦听器,并在按下菜单按钮时关闭对话框。

在这两种解决方案中的任何一种中,需要注意的重要一点是对话(或对话活动)而不是父活动将接收第二次菜单按下。

于 2013-03-27T09:41:09.747 回答
0

初始化打开=假;

     if(open==false){
            showDialogItem();
            open=true;             
             }

     else{
           alertDialog.dismiss();
           open =false;
         }return true;
于 2013-03-27T05:32:09.310 回答