zoukankan      html  css  js  c++  java
  • 自定义View不显示的问题

    问题描述:

          我自定义了一个把 SwipeRefreshLayout 和 RecyclerView 封装在一起的 View ,但是发现 List 不能正常的显示出来,本以为是数据源出现问题,debug了之后发现是 RecycylerView 的 getItemCount() 方法没有被调用,google了一下发现网上出现这种问题的大多数是没写 LayoutMananger ,但我确实有写。一般如果你给 recyclerView 添加了 adapter,Adapter 的 getItemCount() 就应该被调用,所以我考虑是否是因为写布局时出现了什么问题,导致了 View 未能显示不出来。后来发现是自定义 View 在 inflate 是出了问题

    我原先是这样写的

    View v=LayoutInflater.from(context).inflate(R.layout.widget_pulltorefresh_recycler,null);

    未出现错误提示,但是自定义的View一直显示不出来。

    后来的写法是

    View v=LayoutInflater.from(context).inflate(R.layout.widget_pulltorefresh_recycler,(ViewGroup) getRootView(),true);
    或者
    View v=LayoutInflater.from(context).inflate(R.layout.widget_pulltorefresh_recycler,this);

    这样View才能正常显示。

    问题解析:

    LayoutInflater的inflate()方法既可以传入两个参数,也可以传入三个参数

    inflate(int resource, ViewGroup root)
    inflate(int resource, ViewGroup root, boolean attachToRoot)

    它的调用效果如下

    public View inflate(int resource, ViewGroup root) {
           //如果root不为null,attachToRoot为true,否则attachToRoot为false
           return inflate(resource, root, root != null);
    }

    也就是说如果调用的是两个参数的方法,第三个参数的值由第二个参数是否为空所决定。

    下面说一下各个参数的意义,首先第一个参数不用多说,传入的就是你想要获取的 layout 的资源id,后面两个参数意义如下:

    ViewGroup root:指实例的布局所要放入的根视图。
    boolean attachToRoot:指是否附加到传入的根视图。

    上面的说明你可能看不懂,简单的说:

    root参数 就是用来指定你想要将View放入哪一个父布局(或根布局),attatchToRoot参数用来决定是否要真正的放入到父布局中。

    1.如果你想要把自己自定义的View放到某个layout中,那 root 参数就不能为空,并且attatchToRoot参数也必须为true(如果是调用两个参数的方法,直接使root不为空即可)。

    2.如果你的 root 不为空,但是第三个参数attachToRoot为false,那么你的View并未被添加到父 layout 中,但是他能让你的 View 在xml中设置的最外层的layout_width属性和layout_height属性起作用。

    我之前犯的错误就是未指定父布局,导致View并未真正的添加到布局中去。

  • 相关阅读:
    HDU1862 EXCEL排序
    结构体+字符串比较大小(HDU1234开门人和关门人 )
    两个大数字相加
    Ksusha and Array (vector)
    Ksenia and Pan Scales(思维题)
    最大公约数问题(Wolf and Rabbit )
    HDU2044一只小蜜蜂(递推)
    HDU2043密码
    基础贪心算法(HDU2037今年暑假不AC)
    c# winform 关于DataGridView的一些操作(很全,绝对够用)
  • 原文地址:https://www.cnblogs.com/weimore/p/7337001.html
Copyright © 2011-2022 走看看