Android实践(一)| Fragment实现底部导航栏(解决重叠问题)

  • 时间:
  • 浏览:1
  • 来源:uu快3计划_uu快3官方_单双

肯能对Activity生命周期不太了解,不可不都能否看一看我的另一篇博客:

Android笔记(一) | Activity的生命周期

我这里为了区分Fragment页面给每个页面加在了一有另一个TextView,具体就根据当时人的需求在Fragment中写代码就行了。

.我.我.我.我 进入Activity时,首先展示第一有另一个页面,即创建对应Fragment实例,使用add+show法律法子显示出来,.我.我.我.我 点击进入别的页面时,调用hide法律法子将已展示的Fragment页面隐藏(实际是设置Visiable属性为不可见),一点显示对应Fragment页面(已创建则直接调用show法律法子,未创建则创建,一点调用add+show法律法子显示)。

最初学习Android的已经 ,是边学习边做着一有另一个小项目的,肯能项目需求,都要实现一有另一个底部导航栏的功能,肯能基础知识受限,百度了什么都博客,大致就找到两种实现方案:第两种什么都 直接用Fragment实现(点击切换),第二种是ViewPager+Fragment实现(除了点击切换,还支持左右滑动切换)。根据需求使用了第两种法律法子,后期产生了Fragment重叠的疑问图片,肯能两种bug时而总出 ,也我不在乎 怎样才能定位(学生时期),就并非放下了。现在肯能学习进度(系统学习Fragment),重新捡起两种疑问图片,就想写一篇实现功能+处置bug的博客,如有缺乏之处,请留言指教。

Fragment重叠异常

显然,销毁重建后Fragment对象所指向的实例与重建前相同。什么都 .我.我.我 的BottomBar就完成了!

这里补充一点:切换页面就说 可不都能否用replace法律法子,它和hide+show法律法子的直观区别什么都 :使用replace法律法子会先将fragment实例remove掉,一点重新add,这就是因为Fragment每次切换总要重新走一遍生命周期,创建一有另一个新的实例,不必保存每个Fragment的情況;而使用hide+show法律法子则仅仅是将不显示的Fragment设置为不可见,再次显示出来总要保存情況。

什么都,在重建后的的Activity中,又会重新创建Fragment的实例,一点显示出来,而已经 被系统恢复的Fragment也会恢复已经 的显示情況,这就是因为了多个Fragment重叠。当然,任何能是因为Activity销毁重建的情況总要产生两种bug,比如说应用在后台时,肯能内存资源缺乏是因为Activity被kill。既然知道是因为了,那么 处置起来就没能了。

这里帮我到的处置法律法子是从重新创建Fragment这里着手,既然保存的情況会恢复,那么 Activity重建的已经 .我.我.我 不必Fragment重新创建不就行了。具体为何会么会做呢?这里还是都要熟悉Activity的生命周期。

中间代码中逻辑很清晰,根据注释基本不可不都能否看明白,具体一点控件的用法自行百度。到这里功能就肯能实现了,一点会总出 Fragment重叠的bug。具体情況如下图: