按钮控制PopupWindow显示,隐藏问题

最近在做项目中遇到了一个问题,就是根据条件筛选,弹出选择界面。如图所示:


按钮控制PopupWindow显示,隐藏问题
image.png

选择用popupWindow,来实现,看起来是没有什么问题。显示也正常,但是有这么一个要求:
1、比如点击更多 (选中为黄色)弹出界面 再次点击更多(颜色变灰)关闭弹出界面
2、点击其他区域,弹出界面消失 更多(颜色变灰)
如果只是条件一,一切OK,没有问题。
如果只有条件二,一切也OK,没有问题。
但是这两个条件加起来就有问题了。
条件二如果想要更多按钮变灰,那么我们需要监听setOnDismissListener,在onDismiss()方法里做这个操作。
然后当我们这样设置之后,我们发现:
点击显示OK。点击空白区域消失OK,再点击也OK,这个流程完全OK。
但是:
当我们点击更多按钮,显示,再次点击(这里的应该是消失)但是却是又一次弹出来了,怎么回事呢?
我们是在PopupWindow.isShowing()的时候 把PopupWindow 关闭的。
但是PopupWindow有一个这样的一个流程:
点击更多按钮其实也算是空白区域,那么他就会调用diss方法,那么这时候isShowing==false,其实也就是说这个方法根本没有作用,然后我们再次点击更多按钮,就会再次的显示。
如果我们不让外部空白diss也不会有这个问题,但是我们不能逃避这个问题。
接下来我设置各种flag来解决这个问题。然而咩有成功。


按钮控制PopupWindow显示,隐藏问题
image.png

这就是这个过程图
我们发现其实不管点击哪一个其实最后走的方法都是完全一样的,这就是为什么我们无论怎么设置flag都不敢用的原因。

既然过程一样,那么肯定有一样东西不一样。
想到了吗?对!就是时间。上面的方法,是分步走的,下面的方法是连续走的,连续走的时间onDiss()和onTouch()方法的间隔肯定在100mm以内其实也就几十mm,分步走的那么肯定就是100mm以上了,所以我们就从思路上走通了。这样就解决这个问题。具体的代码就不往这里放了,授之以鱼不如授之以渔。如果有不懂得可以留言一起讨论。如果有更好的办法,也请告诉我。一起进步。