web-dev-qa-db-ja.com

戻るボタンでポップアップウィンドウを閉じる

ポップアップウィンドウの外側をクリックするか、戻るボタンでポップアップウィンドウを閉じたいのですが、戻るボタンをクリックすると、アプリケーションを終了する代わりに、アプリケーションが終了します。ポップアップウィンドウを閉じます。

これが私のコードです、

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();
            }
        });
    }
});

それは私が望む結果を私に与えます、しかし私がメニューを閉じるときそれは再び開かない、私はそれを再び開きたいので私は何をすべきですか?ありがとうございました。

12
akky777

交換

popupWindow.setOutsideTouchable(false);

これとともに

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
21
Chirag Ghori

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
            }
        }
    });
7
Gopal Gopi

書いてください onBackPressed()そして次のコードがあります

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

この方法を試してください:onBackPressed()を実装して追加します

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

そして、以下でPopWindowを設定します。

popup.setOutsideTouchable(true);
1
M D

コードでonBackPressed()コールバックをオーバーライドし、ポップアップがすでに表示されているかどうかを確認します(その後、閉じます)。そうでない場合は、superを呼び出して通常の動作を取得します。

0
Behnam

これを試して..

グローバル変数として_PopupWindow popupWindow_を使用します

popup.setOutsideTouchable(true);を使用する

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