Android RecyclerView显示Item布局不一致解决办法
程序员文章站
2022-05-17 22:35:12
recyclerview显示item布局不一致
在自定义recycleradapter的时候,在重写oncreateviewholder方法是使用了
@ove...
recyclerview显示item布局不一致
在自定义recycleradapter的时候,在重写oncreateviewholder方法是使用了
@override public h oncreateviewholder(viewgroup parent, int viewtype) { view view=view.inflate(context,layoutid,null); return view; }
进行生成布局,结果发现生成的布局没有layoutparams。以前自定义view的时候发现,layoutparams是由于viewgroup生成的,因为这里添加的viewgroup为null。所以并不会生成layoutparams。结果在recyclerview的getviewforposition方法中检查了有没有layoutparams如果没有的话就调用layoutmanager的generatedefaultlayoutparams生成默认的layoutparames。代码段如下:
final viewgroup.layoutparams lp = holder.itemview.getlayoutparams(); final layoutparams rvlayoutparams; if (lp == null) { rvlayoutparams = (layoutparams) generatedefaultlayoutparams(); holder.itemview.setlayoutparams(rvlayoutparams); } else if (!checklayoutparams(lp)) { rvlayoutparams = (layoutparams) generatelayoutparams(lp); holder.itemview.setlayoutparams(rvlayoutparams); } else { rvlayoutparams = (layoutparams) lp; }
而在linearlayoutmanager中generatedefaultlayoutparams方法实现如下。
/** * {@inheritdoc} */ @override public layoutparams generatedefaultlayoutparams() { return new layoutparams(viewgroup.layoutparams.wrap_content, viewgroup.layoutparams.wrap_content); }
最终会造成recycleview的显示效果与布局文件不一致。后来使用了layoutinflater来填充布局。
@override public h oncreateviewholder(viewgroup parent, int viewtype) { view view = minflater.inflate(layoutid, parent, false); return getinstanceofh(view); }
查看layoutinflater源码发现inflate最后的参数如果是false的话就不会将生成的view添加到parent。但是会根据parent产生相应的layoutparams 。源码如下:
* @param attachtoroot whether the inflated hierarchy should be attached to * the root parameter? if false, root is only used to create the * correct subclass of layoutparams for the root view in the xml.
因为在oncreateviewholder中产生的view不能由我们手动添加到recycleview中所以最后的参数只能是false;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android RecyclerView显示Item布局不一致解决办法
-
Android NestedScrollView嵌套LinearLayout嵌套RecyclerView子Item布局显示不全
-
有焦点 item 的水平/垂直滚动 RecyclerView-LayoutManager。仿 Android 豆瓣书影音“推荐“频道列表布局
-
android使用同一个RecyclerView实现两种不同Item布局
-
showAsDropDown 某款测试机(Android 4.4.4)在RecyclerView item中显示异常问题
-
android RecyclerView适配器实现多布局item+item内部控件点击事件
-
Android RecyclerView显示Item布局不一致解决办法
-
Android开发中RecyclerView隐藏item的所在区域显示空白的方法
-
Android NestedScrollView嵌套LinearLayout嵌套RecyclerView子Item布局显示不全