好久没写博客了,改到简书来,换个心情,妹子保佑我从此好好学习,天天向上吧。
哼,哼,感觉暴露了什么,我们言归正传哈。
项目中有一个需求,要求从底部弹出一个布局,布局上有三个可以左右切换的列表。这很简单吗!我首先想到的就是在一个底部弹出的dialog上加viewpager和fragment组合。好,写完了,show一下吧,崩了。咦?LZ的bugmaker真不是白叫的,哈哈!
我们看下错误信息。
Android在Dialog上加载fragment时报IllegalArgumentException其中关键信息是:
java.lang.IllegalArgumentException: No view found for id 0x7f070047 (com.yhb.mystudy:id/fl_content) for fragment BottomDialogFragment{41b4d7 #0 id=0x7f070047}
嗯?activity找不到id/fl_content,我这个id是在dialog上啊,跟activity有啥关系,然后琢磨了一会儿,实在是想不通啊。好吧,又要死一大堆脑细胞了,查找问题吧。
一顿操作后,终于给我发现了,原来是getSupportFragmentManager(就叫他这玩意儿吧)惹的祸。经过查找资料得知,这玩意儿使用的时候默认查找的是父布局上的id,而我们dialog的布局相当于外来布局,就像在中国查美国人的身份证信息一样,当然找不到了。至于具体的原因和逻辑,请各位移步到Android源码,自行查看吧,我的脑细胞已经死完了,让我歇会儿哈
身为码农,看到bug就应该像看到美女一样兴奋,我们必须搞定她,啧啧!
那怎么高效快捷的解决这个问题呢,又是一顿查资料,还真给我发现了好东西~DialogFragment,原来谷歌还为我们封装了这么个玩意儿,要不是因为这个bug,我估计是没有机会发现他的。这个控件相当于在父布局上添加了一个fragment和dialog的结合体,这样我们就可以使用getChildSupportFragmentManager了,避免去父布局上查找子布局的问题,所以前面的问题也就迎刃而解了,是不是很方便,而且DialogFragment还结合fragment的生命周期和手机按键来处理dialog的显示状态,大大减少了我们的开发时间,平时有对dialog复杂控制的,也可以用DialogFragment,至于如何使用,还是那句话,请自行查找吧,挺简单的,嘻嘻嘻!
网友评论