国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

分享到微博請遵守國家法律
铁岭市| 太和县| 中方县| 阳曲县| 江门市| 呼图壁县| 韶山市| 区。| 临城县| 平阳县| 永兴县| 那曲县| 鄂伦春自治旗| 林州市| 衡山县| 青铜峡市| 泰来县| 潢川县| 望城县| 灵武市| 富裕县| 项城市| 章丘市| 南岸区| 浏阳市| 西峡县| 新建县| 岳西县| 岱山县| 普兰店市| 长岭县| 松江区| 汤原县| 土默特右旗| 赤城县| 和田市| 白水县| 神农架林区| 徐闻县| 徐汇区| 安塞县|