0

ここではAlertDialog、メニューキーを押してポップアップを表示していますが、もう一度メニューキーを押してダイアログを表示 dialogsしようとすると、がトリガーされないようです。dissmissmenu 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

open=falseを初期化します。

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

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

ダイアログボックスが開くと、基になるアクティビティではなくメニューキーがインターセプトされるため、これは期待どおりに機能しません。AlertDialogを使用しないことで回避できます。代わりに、ダイアログとして表示されるアクティビティを作成できます。

次に、メインアクティビティから、メニューボタンを押すと、このアクティビティが開始されます。そして、このアクティビティでは、メニューボタンを押すと終了します。

もう1つの方法は、キーリスナーをダイアログに追加し、メニューボタンが押されたときにダイアログを閉じることです。

2つのソリューションのいずれにおいても、注意すべき重要な点は、2回目のメニュー押下を受け取るのはダイアログ(またはダイアログアクティビティ)であり、親アクティビティではないということです。

于 2013-03-27T09:41:09.747 に答える