Closed zhengdaone closed 5 years ago
callInit是给quickpopup用的…
你应该更新到最新版本,并阅读readme和wiki…有update()方法或者delayInit供延迟加载。
2.0.8已经太旧了
我尝试过更新到最新版本2.1.8。但是也无效。请问初始化一次之后,就不能允许再次初始化了吗?因为我看到你做了这样的控制:
额,请问你为什么要再初始化一遍,一般来说初始化之后就不允许再初始化了,因为那样会生成两个对象,就好比你在A里面new A(),两个都不是同一个对象。
我使用你的库做筛选框的弹窗。筛选框里面有很多组件,其中一些组件绑定的数据会通过发送网络请求获取,有的时候会有网络相关的异常抛出导致数据获取失败。异常产生时app会弹出一个错误消息页面,提供用户刷新和返回2种操作。返回会调用dismiss()使弹窗隐藏,刷新会使弹窗重新加载。
用户点击返回,再次打开弹窗能重新渲染。但是我使用代码模拟这个操作不能成功。
并且在最新版还不支持重复init了。。。
你的意思是,dismiss()之后再重新showPopup()ui没有更新对吧。
我看了下你贴的代码,你的代码里都是一些basepopup的属性配置,但唯独这个callInit(),在2.0.8的时候,callInit()确实是保留了的,但是当时这个方法的目的其实是为了延迟加载,后来对延迟加载进行了优化。
但是初始化实质上是调用了basePopup的initView方法,该方法会导致重走一遍整个popup的生命期,包括了重新构造一个popup对象,正因为这样,延迟加载仅允许加载一次。
目前我看了你的代码,如果你仅仅需要在dismiss后重新showPopup,你完全可以在showPopupWindow()里面甚至是setOnBeforeShowCallback()里面进行刷新UI操作,而不应该重新构造一遍。
另外,init()一直都是不允许重复的。
好吧,我再想想法,希望你以后能提供一个重新渲染popwindow的api
update()就是
update()似乎达不到Activity提供的recreate()的效果
考虑再三后,还是不加入recreate()方法,抱歉。
import android.animation.Animator; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.OvershootInterpolator; import android.view.animation.TranslateAnimation; import android.widget.ExpandableListView; import android.widget.ListAdapter;
import carbon.pinyi.com.phone.infrastructure.utils.LayoutUtils; import carbon.pinyi.com.phone.service.business.listener.HandleNetworkError; import razerdp.basepopup.BasePopupWindow;
/**
public abstract class BaseFilterPopWindow extends BasePopupWindow implements HandleNetworkError { private Context context; private int width; private int height; private boolean isDestroyed = true; private View anchorView;
}