App 结构很类似微信,底下是个 Tab, 同时也使用 Viewpager+Fragment 实现了类似微信的页面左右滑动功能。(先勿吐槽在安卓上用了 iOS 风格:))
现在想要实现类似微博客户端在首页的时候再次点击首页对应的 tab ,刷新首页中的列表。所以我在首页的 Fragment 中写了个 public 方法,在 Activity 中判断是否是再次点击了首页 tab ,如果是则用首页对应的 Fragment 对象调用该方法刷新该页面中的内容。
现在遇到的问题是, App 如果是第一次正常启动,点击 tab 刷新内容工作很正常。如果 App 转入后台,一段时间后系统将其清理掉后,从最近打开的应用再次打开该 App ,该 App 会从原来的页面恢复,而不是从 Manifest 中设置的启动 Activity 再次启动。
这时我再点击 tab 尝试刷新页面应用就会闪退,报 NullPointerException , 经过检查之后我发现,此时在 Activity 中持有的 Fragment 对象已经不是真正页面上显示的那个了。
我在 Activity 中是自己 new 了这些 Fragment 页面的对象然后通过 FragmentPagerAdapter 设置到 Viewpager 中,所以说当应用是恢复回来的时候仿佛根本没通过 FragmentPagerAdapter 来初始化各个页面的,(但是通过打 Log 我确认应用恢复 Activity 从 Oncreate 开始都走过了)所以就出现了 Activity 中持有的对象不是真正显示的那个。
现在求大牛指点下,应用恢复的时候我的 Viewpager 中的 fragment 是如何产生的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.