烦烦烦,最近过年到处是人请客下馆子,整天迷迷糊糊的,老是忘东忘西,搞得几个recyclerview各种出现No adapter attached; skipping layout
的问题,记录一下,免得又出错。
1、没有设置LayoutManager
//设置布局管理就ok了
layoutManager=new StaggeredGridLayoutManager( 2,StaggeredGridLayoutManager.VERTICAL );
rec_xkjd.setLayoutManager( layoutManager );
rec_xkjd.setAdapter( myXKJDadapter );
这个一定要设置,不然你的recyclerview是无论如何出不来的,为什么呢?
因为recyclerview很灵活,支持纵向的横向的列表,还支持网格式布局、瀑布流布局......等等众多样式。你如果不给她指定一个布局,就想让她显示,她会很为难的(⊙o⊙)~。就好比是叫人打球但不给球,叫人吃饭但不给碗。
2、没考虑Activity或Fragment的生命周期
有时会因为某些需求导致在onResume或onStart方法中重置了recyclerview,但其数据已经丢失或没有重新设置Adapter,就会报错No adapter attached; skipping layout
解决方法视具体情况而定,一般是把recyclerview这一整套代码写在onCreate里面就不用担心出问题。如果一定要在onStart里面写的话......额,还是不建议,毕竟每次onStart方法执行就重置一下recyclerview会极大降低用户友好度。
打个比方:我逛淘宝,往下翻了几十页后,点击一个item查看商品详情,结果返回时执行了onStart()方法让列表重置了,我又得翻好几十页才能接上上次看到的地方。Oh my god!!
3、写Adapter时忘了重写getItemCount()方法
害惨我了,找了各个地方代码都没发现问题,Log打印数据列表也没毛病,就是不显示,一直报错。最后才发现这个方法忘记改了。
getItemCount()方法创建时默认返回0(写完其他的就把这方法忘了,坑啊~),表示列表中item个数为0个,所以不显示。改成数据列表的大小就ok了。
@Override
public int getItemCount() {
//return 0;
//改成下面就好了
return myList.size();
}
总结
嗯⊙∀⊙!,细心就好了。
暂时就这么多,可能不全面,以后遇到了别的突发情况再补充哈。
最后,今天是老妈生日,祝老妈生日快乐!