(1)recyclerView只显示一行而且只占屏幕的一半
解决问题的入口:item,因为是item只显示一行,所以先从item开始找问题。
可能的情况:
- 设置item布局的时候,item设置成了mach_parent,导致一条占据了整个屏幕
- 加载item的时候
- 布局管理器的原因【这是在网络上看到的方法】
我使用的解决方法:
首先检查item布局是否设置了mach_parent,果然是设置了,然后改成wrap_content,运行,发现是多行,但是还是只占屏幕的一半,于是看加载布局的时候
平常加载item布局,我通常使用View view = View.inflate(mContext, R.layout.item_footer_addmore, null);
这种加载方式,这样运行出来的item只有一行,进入inflate里面查看,它是View view = LayoutInflater.from(mContext).inflate(R.layout.item_text, parent, false);
这种方式的封装,第三个布尔参数默认传了true。
补充:后面两个参数的解释,引用郭霖大神的解释
- 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。
- 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。
- 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。
- 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。
最后我改成:View view = LayoutInflater.from(mContext).inflate(R.layout.item_footview_text, parent, false);
就能正常显示了,给该布局的外部再嵌套一层父布局(parent),设置为false。
这里还有一个原因是我自己粗心造成的,在这里记下,项目中使用gson解析,我把整个接口返回的数据放到一个实体类中,实体类里面是一些message,result,start,end以及最重要的List,接着我就鬼使神差的实例化了一个集合,直接把整个实体类放进去了,把这个集合直接添加到适配器,在浏览器上看到返回的集合里面明明有多条,可是运行总是一条,想到这,我都想给自己一巴掌,为什么只有一条,因为返回的就是一个实体,当然只有一条,应该把实体里面返回的集合放到新实例化的集合中,然后添加到适配器,而不是直接把实体类存入新集合。。。超低级,印象深刻,以后不能再犯。。。
总结:编程是门细致活,所以发挥女性的优势,一定要细心~
(2)recyclerview 设置滑动监听无响应
原因:嵌套了scrollview,要对scrollview进行设置监听。
引发的新问题:scrollview只有onTouchListener没有onScrollviewListener,这样导致,服务器没数据的时候,如果我做了一个滑动的操作,触发了onTouch加载不到新数据就会crash,这个和我的实现方式有关,这里简单记下,加载时在有数据的时候才实例化的适配