item不可见 recycleview_RecyclerView不显示Item
今天在寫一個橫向的RecyclerView,寫完運行后怎么都沒顯示item內容,開始以為是數據沒加載,打斷點調試后發現數據加載是沒問題的,瞬間懵逼。。。
Tools -> Layout Inspector 看下布局結構,能看到item存在,但是檢查屬性發現所有item的寬度都為0,所以在界面上看不到有item顯示,可是item是有固定寬度的。。。
到這,其實可以基本定位到item的布局加載問題,而我使用的加載的方式是:
View.inflate(parent.context, R.layout.item_home_channel_normal, null)
后面修改后,正確的加載方式是:
LayoutInflater.from(parent.context).inflate(R.layout.item_home_channel_normal, parent, false)
查看源碼會發現View.inflate()內部就是使用LayoutInflater的inflate()方法
inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
關鍵在于三個參數的使用:
如果inflate(layoutId, root, false ) 則layoutId的最外層的控件的寬高是沒有效果的
如果inflate(layoutId, root, true ) 則layoutId的最外層控件的寬高能正常顯示
郭大神的結論是:
1、如果root為null,attachToRoot將失去作用,設置任何值都沒有意義。
2、如果root不為null,attachToRoot設為true,則會給加載的布局文件的指定一個父布局,即root。
3、如果root不為null,attachToRoot設為false,則會將布局文件最外層的所有layout屬性進行設置,當該view被添加到父view當中時,這些layout屬性會自動生效。
4、在不設置attachToRoot參數的情況下,如果root不為null,attachToRoot參數默認為true。
上面的View.inflate(parent.context, R.layout.item_home_channel_normal, null)相當于
inflate(layoutId, null, false),所以顯示沒有達到預期。
總結
以上是生活随笔為你收集整理的item不可见 recycleview_RecyclerView不显示Item的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Foxmail邮箱最新应用指南 --如何
- 下一篇: log4j记录不同的日志_使用log4j