Закрыть всплывающее окно кнопкой "Назад"

Я хочу отключить всплывающее окно, щелкнув за пределами всплывающего окна или кнопкой "назад", но при нажатии на кнопку "Назад" выход моего приложения вместо выхода из приложения я хочу закрыть всплывающее окно.

вот мой код,

ivmainmenu.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            LayoutInflater layoutInflater 
             = (LayoutInflater)getBaseContext()
              .getSystemService(LAYOUT_INFLATER_SERVICE);  
            View popupView = layoutInflater.inflate(R.layout.popupwindow, null);  
          final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.FILL_PARENT,
                  LayoutParams.WRAP_CONTENT);  
                popupWindow.showAsDropDown(ivmainmenu, 0,14);
                popupView.setPadding(0, 0, 0, 10);
                popupWindow.showAsDropDown(ivmainmenu);

                popupWindow.setBackgroundDrawable(new BitmapDrawable());
                popupWindow.setOutsideTouchable(false);

                TextView tvpopupwork = (TextView)popupView.findViewById(R.id.tvpopupwork);
                TextView tvpopupabout = (TextView)popupView.findViewById(R.id.tvpopupabout);
                TextView tvpopupservices = (TextView)popupView.findViewById(R.id.tvpopupservices);
                TextView tvpopupcontact = (TextView)popupView.findViewById(R.id.tvpopupcontact);

                Typeface typeFace2 =  Typeface.createFromAsset(getAssets(),"fonts/arboriaboldregular.ttf");
                tvpopupwork.setTypeface(typeFace2);
                tvpopupabout.setTypeface(typeFace2);
                tvpopupservices.setTypeface(typeFace2);
                tvpopupcontact.setTypeface(typeFace2);

                tvpopupwork.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent intent = new Intent(Home.this,Ourwork.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });

                tvpopupabout.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent intent = new Intent(Home.this,Aboutus.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);  
                    }
                });

                tvpopupservices.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        Intent intent = new Intent(Home.this,Services.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });

                tvpopupcontact.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        Intent intent = new Intent(Home.this,Contact.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                        startActivity(intent);
                    }
                });
                 ivmainmenu.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    popupWindow.dismiss();
                }
           }
        });

Он дает мне результат, который я хочу, но когда я закрываю меню, он не открывается снова, я хочу снова открыть его, чтобы что мне делать? спасибо.

Ответ 1

Заменить

popupWindow.setOutsideTouchable(false);

с этим

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);

Ответ 2

Поддерживать глобальную ссылку для PopUpWindow и переопределять onBackPressed()...

@Override
public void onBackPressed() {
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
    } else {
        super.onBackPressed();
    }
}

Отклонить те же Button...

    ivmainmenu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(popupWindow != null && popupWindow.isShowing()) {
                popupWindow.dismiss();
                popupWindow = null;
            } else {
                // show pop up now
            }
        }
    });

Ответ 3

popupWindow.setBackgroundDrawable (new BitmapDrawable());
popupWindow.setOutsideTouchable(true); 
;)

Ответ 4

напишите onBackPressed() и получите следующий код

if(popup!=null){
   //dismiss the popup
   popup.dismiss();
   //make popup null again
   popup=null;
}

Ответ 5

Попробуйте это.

Используйте PopupWindow popupWindow как глобальную переменную

использовать popup.setOutsideTouchable(true);

@Override
public void onBackPressed() {
    if (popupWindow != null) {
        if (popupWindow.isShowing()) {
            popupWindow.dismiss();
        }
    } else {
        finish();
    }
}

Ответ 6

Попробуйте следующим образом: Внесите onBackPressed() и добавьте

if(popup!=null) {
    popup.dismiss();
    popup=null;
}

И установите PopWindow ниже:

popup.setOutsideTouchable(true);

Ответ 7

Вы можете переопределить обратный вызов onBackPressed() в своем коде и проверить, отображается ли ваше всплывающее окно (затем отклоните его), иначе вы вызываете супер, чтобы получить нормальное поведение.