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

歡迎光臨散文網(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é)的評論 (共 條)

分享到微博請遵守國家法律
隆昌县| 犍为县| 和林格尔县| 德阳市| 台南县| 连平县| 奎屯市| 呼图壁县| 通道| 南投县| 库车县| 治多县| 玉林市| 吉首市| 青州市| 祥云县| 广元市| 乳山市| 乐清市| 白山市| 和平区| 滦平县| 南昌县| 尚义县| 广河县| 岳阳市| 玉环县| 晋州市| 攀枝花市| 岳西县| 邢台市| 普安县| 石台县| 辛集市| 平果县| 乃东县| 拜城县| 龙南县| 多伦县| 三河市| 永登县|