V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuhaoyangx
V2EX  ›  Android

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

  •  
  •   xuhaoyangx · 2017-01-11 22:08:41 +08:00 · 11307 次点击
    这是一个创建于 2910 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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



    xingda920813
        7
    xingda920813  
       2017-01-12 10:03:46 +08:00
    xuhaoyangx
        8
    xuhaoyangx  
    OP
       2017-01-12 10:05:31 +08:00
    @xingda920813 局对布局不行,等下我也试下你这个
    xuhaoyangx
        9
    xuhaoyangx  
    OP
       2017-01-12 10:05:58 +08:00
    绝对布局
    xingda920813
        10
    xingda920813  
       2017-01-12 10:09:02 +08:00
    但是很想不通, CardView 本身就是一个 FrameLayout, 而且在 Android 5.0 以上, 相当于并没有重写 onMeasure 方法 (onMeasure() = super.onMeasure()), 为什么直接用 CardView 作为 itemView 就不行.
    xuhaoyangx
        11
    xuhaoyangx  
    OP
       2017-01-12 10:12:36 +08:00
    @xingda920813 我也是这么觉得,很恶心的玩意
    xuhaoyangx
        12
    xuhaoyangx  
    OP
       2017-01-12 14:24:48 +08:00
    @xingda920813 addView(view,params)这个函数的问题~,这里添加 params 没有作用
    lee015
        13
    lee015  
       2017-01-13 09:15:27 +08:00 via Android
    ViewUtils.inflate 里面 layoutId 判断,不等于 0 就是有效的 id 了。
    xuhaoyangx
        14
    xuhaoyangx  
    OP
       2017-01-13 09:19:00 +08:00
    @lee015 啥?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:18 · PVG 02:18 · LAX 10:18 · JFK 13:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.