如何在android中关闭已打开的以编程方式弹出的窗口?

时间:2016-04-26 18:31:44

标签: android listview popupwindow onitemclicklistener

我在ListView中打开了一个OnItemClickListener,打开一个弹出窗口。 但是,当我点击列表中的另一个项目时 - 另一个弹出窗口打开,我不知道如何获取已打开的窗口,以便我可以关闭它。 任何帮助将非常感谢!

这是我打开弹出窗口的代码:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                LayoutInflater layoutInflater
                        = (LayoutInflater)getBaseContext()
                        .getSystemService(LAYOUT_INFLATER_SERVICE);
                View popupView =layoutInflater.inflate(R.layout.popup,null);


                Object checkExistence = parent.getItemAtPosition(position);
                int imgID = ctx.getResources().getIdentifier(checkExistence.toString().toLowerCase().replace(" ","_"), "drawable", ctx.getPackageName());
                ImageView imageView = (ImageView) popupView.findViewById(R.id.img1);

                imageView.setImageResource(imgID);

                final PopupWindow popupWindow = new PopupWindow(
                        popupView,
                        Toolbar.LayoutParams.WRAP_CONTENT,
                        Toolbar.LayoutParams.WRAP_CONTENT);

                Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
                btnDismiss.setOnClickListener(new Button.OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        popupWindow.dismiss();
                    }});

                popupWindow.showAsDropDown(list, 300, -1250);

            }
        });

2 个答案:

答案 0 :(得分:0)

你可以试试这个,

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

或者

popupWindow.setFocusable(true);

答案 1 :(得分:0)

如注释中所述,您可以使用范围较大的变量来保留对弹出窗口的引用。然后,您可以使用dismiss()关闭它。

// class member variable
PopupWindow popupWindow;

// ...

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        // ...

        popupWindow = new PopupWindow(popupView, Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT);

        Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
        btnDismiss.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View v) {

                // dismiss the popup window
                popupWindow.dismiss();
            }});

        // ...

    }
});