怒更!讲道理今天码代码码得有点爆炸,本来想给自己放个假的,但是转念一想记录一下崩溃经验也蛮有意思的。开始吧。
出于功能和审美需求,我在new这个project的时候就引用了Navigation Drawer Activity这个模板。emmm….一波设计之后的UI是这样的(这个是下午的版本,还能run的)
稍微讲解一下,Navigation Drawer就是侧滑出来的这个菜单,菜单里面的各项用于打开各个页面。可以是跳转到Activity,也可以是Fragment。
刚创建的ND Activity的layout目录下包含了复杂的app_bar_main,content_main,activity_main……其中有着各种include
关系(这个我刚开始理解了好一阵子,后来发现就是包含关系。仔细看XML文件里面都写了这么一行include layout xxxx
)。一开始被这些东西弄得云里雾里,连上面的样式都是反反复复修改了n天才琢磨出来的。
然后问题就来了!
我设计的结构:activity_main include
(app_bar_main
+ content_main
)。看似没什么问题,实际上我首页的各种事件响应和处理代码都写在了MainActivity里面。单一页面的时候当然发现不了问题啦。
then,我下午搞定了SQLite数据库的创建和写入,于是想顺便在Navigation Drawer里面做一个专门用来debug的Activity,思路当然是用Intent
然后startActivity(Intent)
。这一切下来简直不能再6,可是这时候我最没重视的ToolBar出来搞事情了。
当我使用AppCompatActivity来实现这个debugActivity的时候,我发现主界面显示的ToolBar上面的Toogle不见了,然后我试着滑动拖出Navigation Drawer,但是我发现并不行!原因是,Navigation Drawer在MainActivity里面,而现在应用已经跳转到了另一个Activity,自然就无法继续使用Navigation Drawer了。怎么办呢?百度了以后我才知道原来正确的实现方式是用Fragment。
稍作解释:Fragment就是一个片段,Activity则是一个完整的活动,Activity里面可以灵活引用Fragment。
一开始我看Fragment是高级的东西,就没有想到用它,现在后悔了。于是,重新规划了APP的架构。
新架构如下:Navigation Drawer作为页面切换的工具,默认展示在首页的是“所有事项”这个Fragment。然后页面的切换就调用Fragment的切换来实现。原理是这样的,这些Fragment的调用代码都写在MainActivity里面,MainActivity的Navigation Drawer作为导航,ToolBar的代码则是原封不动,只是添加了一些功能性的代码用于更改标题和变化ToolBar上的功能按钮。(这才是正确思路)
然后我的工程就开始了,我需要把原本content_main
的各种被include关系全都拆掉,然后在activity_main里面腾出空间,利用代码让Fragment展示出来。嗯…..说出来简单,但是做事情要考虑到历史的进程….这些工程目前耗费了我一个半小时…..对,目前….因为我还没有完成,这个APP目前还不能run…..妈卖皮……
祝愿后人能少走些弯路。