CardView 动态修改布局 高度无法相应变化

2017-01-11 22:08:41 +08:00
 xuhaoyangx

在 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);
    }
10720 次点击
所在节点    Android
14 条回复
xingda920813
2017-01-11 22:37:58 +08:00
替换完 FooterView 后,对 Footer 所在的 Item 进行 RecyclerView.Adapter.notifyItemChanged(int position) 试试?
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 一样宽的。不解。
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 就好了。
xuhaoyangx
2017-01-12 08:32:20 +08:00
@xingda920813 如果是四大布局你设置这些没问题,也能 match_parent,但是 CardView 不行,设置了 LayoutParams 还是不能撑开
xuhaoyangx
2017-01-12 08:46:07 +08:00
@xingda920813 github 赞一个,写法有些累赘。

很简单的一个代码控制,但是就是撑不开,如果通过 xml inflate 加载没问题

xingda920813
2017-01-12 10:01:09 +08:00
@xuhaoyangx CardView 外面用代码包一层 FrameLayout 四大布局之类的东西, 好像是可以的.



xingda920813
2017-01-12 10:03:46 +08:00
xuhaoyangx
2017-01-12 10:05:31 +08:00
@xingda920813 局对布局不行,等下我也试下你这个
xuhaoyangx
2017-01-12 10:05:58 +08:00
绝对布局
xingda920813
2017-01-12 10:09:02 +08:00
但是很想不通, CardView 本身就是一个 FrameLayout, 而且在 Android 5.0 以上, 相当于并没有重写 onMeasure 方法 (onMeasure() = super.onMeasure()), 为什么直接用 CardView 作为 itemView 就不行.
xuhaoyangx
2017-01-12 10:12:36 +08:00
@xingda920813 我也是这么觉得,很恶心的玩意
xuhaoyangx
2017-01-12 14:24:48 +08:00
@xingda920813 addView(view,params)这个函数的问题~,这里添加 params 没有作用
lee015
2017-01-13 09:15:27 +08:00
ViewUtils.inflate 里面 layoutId 判断,不等于 0 就是有效的 id 了。
xuhaoyangx
2017-01-13 09:19:00 +08:00
@lee015 啥?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX