最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

DEVLOG 9.13 手寫RecyclerView問題總結(jié)

2021-09-14 15:00 作者:房頂上的鋁皮水塔  | 我要投稿


在開發(fā)過程中遇到的若干問題集合:

  1. RecyclerView手寫的過程中為什么要增加clickable屬性

  2. RecyclerView 的TextView 沒有顯示出來? 但是修改了布局文件從RelativeLayout到LinearLayout就可以了?WHY

  3. ?LayoutInflater.inflate()幾種重載和參數(shù)的區(qū)別

  4. addView()

問題一:

  1. RecyclerView手寫的過程中為什么要增加clickable屬性:

    MyRecyclerView本身就是直接繼承ViewGroup,在View和ViewGroup中clickable默認為false:


如果clickable為fasle 會返回false

如果clickable為false,onTouchEvent不會被MyRecyclerView消費。


暫時不知道為什么,已經(jīng)發(fā)了Stack Overflow,之后知道了結(jié)果再回來回答。

3. LayoutInflater.inflate重載方法:

LayoutInflater.inflate我們通常在RecyclerView和Fragment中從布局文件加載View。主要有兩個參數(shù)和三個參數(shù)的方法。兩個參數(shù)的方法會調(diào)用三個參數(shù)的inflate方法,并且將attach2root設(shè)置為true。

所以使用兩個參數(shù)的方法,和設(shè)置第三個參數(shù)為true是等價的。


理解attach2Root


當attach2Root為false


我們一般在RecyclerView加載布局文件時,不會設(shè)置attach2root為true,這個時候resultView的rootView是自身的布局的根布局,也就是這個LinearLayout。返回的對象是LinearLayout這個ViewGroup。

當attach2Root為true

inflate會將子View添加到自身,并且最后會返回root。

當兩個參數(shù)設(shè)置不同的時候,上述過程可以總結(jié)為下圖:

這里盡量不要設(shè)置root為null,因為root會參與計算LayoutParams。


LayoutInflater.inflater什么時候設(shè)置attach2root為false?

?總結(jié)一下,這里主要有兩個場景,一個場景是使用RecyclerView和Fragment實例化View的時候。這兩個場景都有一個共同性,就是實例化后的View需要交給ViewGroup來管理出現(xiàn)的時間,而不是直接添加到ViewGroup。


問題三:addView

addView是ViewGroup的方法。具體的參數(shù)含義和布局有關(guān)。


addView方法會依次調(diào)用requestLayout invalidate 和 addViewInner

在requestLayout中,View會尋找到自己的parentView,一直最終找到ViewRootImpl,然后找到ViewRootImpl的scheduleTraversals方法:

這里會post一個Runnable,這個Runnable之中包含了performTraversals,然后開始三大流程。

在addViewInner中也會調(diào)用child.requestLayout,因為childView可能也攜帶了一些參數(shù)。

但是在addViewInner中也會調(diào)用child.requestLayout,這樣好像重復了。但是在注釋中說,使在child.requestLayout之前調(diào)用requestLayout可以屏蔽子View再向上傳遞讓父View重新layout的事件。所以當子View.requestLayout時,調(diào)用ViewGroup layout measure,然后 invalidate,最后再是子View layout measure draw。大概是這樣~

DEVLOG 9.13 手寫RecyclerView問題總結(jié)的評論 (共 條)

分享到微博請遵守國家法律
卫辉市| 手机| 伊吾县| 洛南县| 灵石县| 哈尔滨市| 绥宁县| 独山县| 康乐县| 通榆县| 遂平县| 玉环县| 乐都县| 通河县| 莒南县| 青海省| 辽阳县| 大新县| 淮阳县| 临安市| 高清| 施甸县| 沐川县| 醴陵市| 民权县| 黄浦区| 高邑县| 水城县| 全椒县| 互助| 德格县| 乐平市| 山阴县| 息烽县| 苏州市| 梁河县| 东山县| 景宁| 诸城市| 江华| 眉山市|