Activity界面渲染完成后预处理问题
程序本身就是方便用户生活的,不得不说,app的出现让人们的生活之需要动动手指就能完成以前跑断腿的操作,但是今天的这个预处理,却仍我感觉到丈二和尚摸不着头脑,我们一起来瞧瞧:
事情呢,是这样样子的,正常情况下:
- 订单列表
- 列表里item 点击跳转到详情页
- 详情页面里有个按钮,点击这个按钮会弹出一个评价的弹窗
本来,这样一套流程走下来来是没有任何问题的,但是新的需求是,在新开辟的A界面里,点击支付按钮,支付成功后,主动跳到详情页面,并且,并且,打开弹窗!
但是,方法总比困难多吧,多百度多思考,这不,解决方法已经出来了:
-首先正常的逻辑依旧是原来的流程。
-我们要做的就是在Activity加载完毕后自动把popowindow 给显示出来
-需要注意的是,在正常显示popwindow 的逻辑里我们要做一些判断,这点等下看代码
那么我们怎么判断Activity是否加载完毕呢?
通过生命周期吗?诚然,这是个方法,可是生命周期未免有些太复杂,有些时候走的顺序又是不一样的,所以不好控制,那么我们将采用一种简单明了的方法 onWindowFocusChanged ,这个方法里返回一个布尔类型的值,true 表示Activity已经拿到焦点,也就是界面已经渲染完毕,false表示Activity还在加载中,这个时候是不能弹窗的。
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
if (!isShowIng) {
if (showPopWinFlag == 10090) {
//自动打开弹窗
isShowIng = true
showPopwinComment(mOrderId)
}
}
}
}
看代码,这里我做了三层判断,来完成自动弹窗的顺利弹出。
- hasFocus ,判断Activity是否获取焦点,这是个关键,只有获取焦点了才能继续往下进行。
- isShowIng ,这个变量是我在Activity一开始就声明出来的,默认值是false,我在正常的流程里,点击事件弹出弹窗的时候置为true
orderCommet.setOnClickListener { //评价订单 isShowIng = true showPopwinComment(order_id) }
这里主要就是防止在Activity渲染完成后,一直走onWindowFocusChanged 方法导致popwindow 关闭后依旧弹出的问题。
- showPopWinFlag 则是支付完成后跳转过来表示要打开弹窗的标识。
- 当然在这些都顺利弹出后,别忘了,再把 isShowIng = true 置为true.
至此,一个完整的预加载弹窗就是顺利搞定了。