DialogFragment+viewPager+fragment+recyclerView

繼續(xù)記錄DialogFragment使用的坑虏束,當(dāng)然這也算是ViewPager的坑.唆鸡。

需求是這樣的涝影,底部彈框中有N個(gè)頁面。每個(gè)頁面都有一個(gè)列表争占。那么我就用BottomSheetDialogFragment作為底部的彈框。N個(gè)頁面呢序目。我就直接用了一個(gè)viewpager臂痕,然后放N個(gè)fragment進(jìn)去。結(jié)果一開始列表數(shù)據(jù)很少猿涨。不用上下滑動(dòng)握童。所以就沒問題。但是在數(shù)據(jù)多了的時(shí)候叛赚。我發(fā)現(xiàn)只能viewpager可以左右切換正常澡绩。但是其中的列表無法上下滑動(dòng)稽揭,只能滑動(dòng)默認(rèn)加載的第一頁。

來肥卡。分析一下為何只能滑動(dòng)第一頁的recyclerView呢溪掀?

這就要從BottomSheetBehavior源碼說起,關(guān)鍵點(diǎn)在于findScrollingChild方法和事件onInterceptTouchEvent


其他頁面既然滑不動(dòng)步鉴,那么肯定得從事件分發(fā)攔截說起揪胃,我們就直接去onInterceptTouchEvent方法中看最后肯定是被BottomSheetBehavior攔截掉了。


onInterceptTouchEvent

斷點(diǎn)進(jìn)去發(fā)現(xiàn)了其他頁面這個(gè)return最終要滿足這么多條件才被攔截(ACTION_MOVE外的事件條件都是false)氛琢,只有在ACTION_MOVE的時(shí)候喊递,關(guān)鍵點(diǎn)在第二個(gè)斷點(diǎn)parent.isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY()),?它在其他頁面始終返回false阳似,在第一次加載的頁面時(shí)這里返回的是true骚勘。這里的意思是,判斷scroll是否在CoordinatorLayout坐標(biāo)系中撮奏,第一次加載的頁面在其中俏讹。而其他頁面都不再其中。也就被攔截掉了挽荡。導(dǎo)致了recyclerview無法滑動(dòng)藐石。

那么為何只有第一次加載的頁面才在其中呢?看findScrollingChild定拟。


findScrollingChild

這里的scrollingChild其實(shí)是viewPager

dialog中xml示例代碼

findScrollingChild會(huì)遞歸找R.layout.design_bottom_sheet_dialog中的子view于微,最終找到viewPager中的第一個(gè)recyclerView不為空就設(shè)置了nestedScrollingChildRef =new WeakReference<>(findScrollingChild(child));

nestedScrollingChildRef 就只有一個(gè),所以就是第一次拿到的那個(gè)recyclerView青自,也就是那一個(gè)列表可以滑動(dòng)株依。

那么問題已經(jīng)找到了。怎么解決了延窜。


提供幾種思路恋腕。。還沒驗(yàn)證的哈逆瑞。


1.重寫攔截事件荠藤,只針對(duì)這個(gè)業(yè)務(wù)模式強(qiáng)行return false。

2.nestedScrollingChildRef用list保存获高,findScrollingChild時(shí)保存全部recyclerview哈肖。但這種對(duì)內(nèi)存消耗較大。

推薦使用ViewPager2念秧、一勞永逸淤井。

最后頁面切換如絲般順滑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子币狠,更是在濱河造成了極大的恐慌游两,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漩绵,死亡現(xiàn)場(chǎng)離奇詭異贱案,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渐行,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門轰坊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祟印,你說我怎么就攤上這事肴沫。” “怎么了蕴忆?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵颤芬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我套鹅,道長(zhǎng)站蝠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任卓鹿,我火速辦了婚禮菱魔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吟孙。我一直安慰自己澜倦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布杰妓。 她就那樣靜靜地躺著藻治,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巷挥。 梳的紋絲不亂的頭發(fā)上桩卵,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音倍宾,去河邊找鬼雏节。 笑死,一個(gè)胖子當(dāng)著我的面吹牛高职,可吹牛的內(nèi)容都是我干的矾屯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼初厚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起产禾,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤排作,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亚情,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妄痪,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年楞件,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衫生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡土浸,死狀恐怖罪针,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黄伊,我是刑警寧澤泪酱,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站还最,受9級(jí)特大地震影響墓阀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拓轻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一斯撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扶叉,春花似錦勿锅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至作瞄,卻和暖如春茶宵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宗挥。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工乌庶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人契耿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓瞒大,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親搪桂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子透敌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容