五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

分享到微博請遵守國家法律
增城市| 遂昌县| 中卫市| 深州市| 曲水县| 大悟县| 神农架林区| 揭东县| 迁西县| 辽阳县| 铁力市| 北宁市| 开鲁县| 邮箱| 罗城| 独山县| 德阳市| 上思县| 湘潭市| 昌邑市| 合肥市| 穆棱市| 天峨县| 青州市| 堆龙德庆县| 黄平县| 东源县| 明光市| 门源| 湛江市| 缙云县| 三都| 辰溪县| 溧阳市| 沙雅县| 全椒县| 井冈山市| 宁蒗| 龙胜| 成安县| 宜城市|