<p>源代码如下:</p><div> </div>
if (popupWindow != null && popupWindow.isShowing()) { popupWindow.dismiss(); return ; } else { showPopWindow() ; popupWindow.setOutsideTouchable(true); //popupWindow.update() ; } private void showPopWindow() { popupWindow = new PopupWindow(getContext()); popupWindow.setContentView(quick_lv); // 设置popupWindow的宽高 popupWindow.setWidth(lin_loginfast.getWidth()); popupWindow.setHeight(200); popupWindow.setBackgroundDrawable(getContext().getResources().getDrawable(R.drawable.background_popwindow)); popupWindow.showAsDropDown(lin_loginfast, 0, 0); // 设置点击其他位置popupWindow消失 }看我的代码可以知道我的目的其实就是单纯的想让popwindow在特定的条件下消失和显示而已,但是出现的状况是有的,
首先在关于popwindow.update()的状况:当不添加这个的时候在外面点击popwindow外消失的效果不能实现,添加的时候呢,点击按钮之后popwindow总是出现,消失不了,现在记住,我会在处理之后在后面添加解决方法.
我现在找到原因了 ,我们一般情况下判断popwindow的消失与否一般情况下是这样的:
if(popwindow !=null){//当popwindow不显示的时候一般情况下的popwindow是等于null的,而我刚才看了 在上面的代码之中很长时间的popwindow在消失之后还是不为空的。这是怎么回事呢?我们暂且不去管他只要直接在他的显示和消失的时候做个boolean类型的数据 flag就可以了。
但是这个时候问题又来了,这个时候点击popwindow外部区域popwindow不能消失了,这个怎么回事呢?
这个时候我们可以看到,因为我们的flag代替了popwindow !=null成为了判断条件,这个时候的popupWindow.setOutsideTouchable(true); 不能实现,这个时候需要做的是
在popupWindow.setOutsideTouchable(true); 下面添加以下的代码:
popupWindow.setFocusable(true) ; popupWindow.setTouchable(true) ; popupWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO 自动生成的方法存根 popupWindow.dismiss() ; return true; } }) ;这个时候再点击就可以实现了。
至此,问题解决!
}