0

我有如下弹出窗口类。

public class Popup extends PopupWindow {

Context context;
EditText et_bankname, et_banknumber;
String bank_name, account_number;

public Popup(Context ctx) {
    super(ctx);
    context = ctx;

    setContentView(LayoutInflater.from(context).inflate(R.layout.bank_details, null));
    setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
    View popupView = getContentView();
    setFocusable(true);
    Button btn_close = (Button) popupView.findViewById(R.id.popupClose);
    Button btn_submit = (Button) popupView.findViewById(R.id.popupSave);
    et_bankname = (EditText) popupView.findViewById(R.id.bank_name);
    et_banknumber = (EditText) popupView.findViewById(R.id.bankacc_no);
    btn_submit.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            bank_name = et_bankname.getText().toString();
            account_number = et_banknumber.getText().toString();
            if (!bank_name.equals("") && !account_number.equals("")) {      
                Toast t1 = Toast.makeText(context,bank_name + " "+account_number , Toast.LENGTH_SHORT);
                t1.setGravity(Gravity.TOP, 0, 100);
                t1.show();                  
                dismiss();                              
            } else {
                Toast t1 = Toast.makeText(context,
                        "Please provide valid details", Toast.LENGTH_SHORT);
                t1.setGravity(Gravity.TOP, 0, 100);
                t1.show();
            }
        }
    });
}

public void show(View v) {
    showAtLocation(v, Gravity.CENTER, 0, 0);
}
}

我将通过以下方式在我的活动中访问此弹出窗口

Popup popup = new Popup(getBaseContext());
popup.show(arg1);

这完美地工作。但我想知道这个弹出窗口什么时候消失。为此,我现在使用Thread如下概念。

if (isPopupShowing) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                while (isPopupShowing) {
                    if (!popup.isShowing()) {
                        isPopupShowing = false;
                        MainActivity.this.runOnUiThread(new Runnable() {

                            public void run() {
                                loadDSP(type);
                            }
                        });
                    }
                }
            }
        };
        thread.start();
    }

但是这个线程将继续运行,直到弹出窗口被关闭。所以我觉得用任何其他方式替换这个解决方案会更好。

我想要的是?关闭弹出窗口时,就像“弹出窗口已关闭”之类的活动很亲密。

为什么我用这种方式?我将在三个活动中使用这个弹出窗口。这就是为什么我要为弹出窗口创建一个单独的类。

任何帮助都将受到高度评价。

谢谢你。

4

2 回答 2

5

PopupWindow 已经有自己的dismiss listener了,使用方法如下

Popup popup = new Popup(getBaseContext());
popup.show(arg1);

将其更改为

Popup popup = new Popup(getBaseContext());

popup.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                // Do your action
            }
        });

popup.show(arg1);
于 2013-05-30T10:06:29.250 回答
3

编辑 我没有注意到你正在扩展一个 PopupWindow,它已经实现了这个,如@Jayabal 的回答所示。无论如何,如果 PopupWindow 还没有它自己的 onDismissListener,这就是你会做的事情。

只需创建您自己的 OnDismissListener 接口。

public interface onDismissListener{

    public void onDismiss();

}

在 PopUp 类和 setter 中添加对 Listener 的引用。

OnDismissListener listener;

public void setOnDismissListener(OnDismissListener listener){
    this.listener = listener;
}

然后在你的活动中

Popup popup = new Popup(getBaseContext());
popup.setOnDismissListener(new OnDismissListener(){

    public void onDismiss(){
        //do what you need to here
    }
});
popup.show(arg1);

这种模式你应该很熟悉,它在 Android 中无处不在。

于 2013-05-30T09:57:01.773 回答