Timmy-zzh / TDialog

DialogFragment封装,高效实现各种弹窗效果

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

按Home键切换后台,再次返回,点击事件失效

Jeromeer opened this issue · comments

RT
打开开发者选项的<不保留活动>,模拟内存回收,打开任意弹窗,点击事件正常,按下Home键,再返回页面,点击弹窗的点击事件失效,我自己定义的DialogFragment也卡在这里,应该是回调点击事件的接口为null,所以 布吉岛怎么弄了

commented

TController 同时实现了 Parcelable 和 Serializable,parcel 部分只 write&read 了基本类型,listener 并没有 parcel。在 TDialog 的 onSaveInstanceState 方法中使用的是 putParcelable 保存 TController,在 onCreate 中通过 getSerializable 取出 TController。

作者在 https://github.com/Timmy-zzh/TDialog/commit/71841f74512f174e7a8f26391fa8dd3ec1cf075a “修复按home键报错问题”,应该是类似下面这种报错:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object Caused by: java.io.NotSerializableException:

其实就是 listener 的嵌套类也要 Serializable,那就很麻烦了。所以作者解决此问题的关键就在于:

  1. TController 增加实现了 Parcelable;
  2. 在 TDialog 的 onSaveInstanceState 方法中使用 putParcelable 代替 putSerializable;

解决了奔溃问题,但是 listener 就丢了(不保留活动),所以点击事件失效了。不知作者有没有更好的方法可以解决 listener 丢失问题?