2013-03-27 58 views
0

這裏我顯示一個AlertDialog按下菜單鍵並顯示彈出式菜單dialogs,但是當我試圖以dissmiss對話框時,再次按菜單鍵第二次似乎menu key沒有觸發。第二次按下菜單鍵時無法關閉AlertDialog

這裏是我這個

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

    } 
+0

爲什麼在Menu按鈕上顯示對話框?不直觀的行爲。 – dannyroa 2013-03-27 05:27:57

+0

我知道,但那是我的要求。 – 2013-03-27 05:28:49

回答

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; 

     } 
+1

感謝@Arju爲你的努力,這就是我真正想要的。 – 2013-03-27 09:40:50

0

初始化開放=虛假代碼;

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

    else{ 
      alertDialog.dismiss(); 
      open =false; 
     }return true; 
+0

感謝您快速回放,它沒有任何區別。 – 2013-03-27 05:39:30

+0

Iam檢查它你是對的它沒有被解僱,會在一分鐘後回來 – 2013-03-27 06:03:09

+0

你有沒有想法.. – 2013-03-27 08:48:39

0

像您期望這是行不通的,因爲一旦只需將對話框打開,它會攔截菜單鍵而不是底層活動。您可以解決它是而不是使用AlertDialog。相反,你可以創建一個是作爲一個對話的活動:

然後從你的主要活動,在菜單按下按鈕,啓動這項活動。在此活動中,按下菜單按鈕,即可完成。

另一種替代方法是將按鍵偵聽器添加到對話框,並在按下菜單按鈕時關閉對話框。

在兩種解決方案中的任何一種中,重要的一點是它是對話框(或對話框活動),而不是將接收第二次菜單按下的父活動。

+0

我會考慮你的觀點,現在它按我的預期工作。 – 2013-03-27 11:05:19

相關問題