在 RecycleView 中 实现 FooterItem 三种状态,实现的方式是替换 item 根布局内的内容。
发现在根布局是 CardView 时,替换高度不一致的内容时,高度不会跟着变化,会被掩盖掉一部分,不知道这样的情况,是要对 item 重绘还是整个 RecycleView 重绘? [图片和网站背景太相似了,大家可以选择图片看出问题]
还有个疑问。因为在 onCreateViewHolder 需要 parent,不然item无法match_parent ,现在加载 cardview 的方式就是用了 xml 。不知道有没有用代码 new 一个的方式?
mFooterLayout = (CardView) ViewUtils.inflate(parent, R.layout.item_comment_cardview);
ViewUtils :
public static View inflate(ViewGroup parent, int layoutId) {
if (layoutId <= 0) {
return null;
}
return LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
}
1
xingda920813 2017-01-11 22:37:58 +08:00
替换完 FooterView 后,对 Footer 所在的 Item 进行 RecyclerView.Adapter.notifyItemChanged(int position) 试试?
|
2
xingda920813 2017-01-11 22:41:53 +08:00
为什么 “因为在 onCreateViewHolder 需要 parent ,不然 item 无法 match_parent ,现在加载 cardview 的方式就是用了 xml ”?
我封装的 RecyclerView 的加载更多的 FooterView 就是 Java 代码生成的。似乎 ViewGroup.LayoutParams.MATCH_PARENT 可以正常工作,纵向列表的情况下, FooterView 的宽度是可以匹配到跟 RecyclerView 一样宽的。不解。 |
3
xingda920813 2017-01-11 22:48:21 +08:00
https://github.com/xingda920813/SimpleRecyclerView/blob/master/simplerecyclerview/src/main/java/com/xdandroid/simplerecyclerview/Adapter.java
看一下 onCreateViewHolder 方法,只要给 new 出来的 ViewGroup 设一个 LayoutParams 就好了。 |
4
xuhaoyangx OP @xingda920813 如果是四大布局你设置这些没问题,也能 match_parent,但是 CardView 不行,设置了 LayoutParams 还是不能撑开
|
5
xuhaoyangx OP |
6
xingda920813 2017-01-12 10:01:09 +08:00
|
7
xingda920813 2017-01-12 10:03:46 +08:00
|
8
xuhaoyangx OP @xingda920813 局对布局不行,等下我也试下你这个
|
9
xuhaoyangx OP 绝对布局
|
10
xingda920813 2017-01-12 10:09:02 +08:00
但是很想不通, CardView 本身就是一个 FrameLayout, 而且在 Android 5.0 以上, 相当于并没有重写 onMeasure 方法 (onMeasure() = super.onMeasure()), 为什么直接用 CardView 作为 itemView 就不行.
|
11
xuhaoyangx OP @xingda920813 我也是这么觉得,很恶心的玩意
|
12
xuhaoyangx OP @xingda920813 addView(view,params)这个函数的问题~,这里添加 params 没有作用 。
|
13
lee015 2017-01-13 09:15:27 +08:00 via Android
ViewUtils.inflate 里面 layoutId 判断,不等于 0 就是有效的 id 了。
|
14
xuhaoyangx OP @lee015 啥?
|