TabLayout double click 標(biāo)題回頂部

背景

產(chǎn)品同學(xué)要求了一個(gè)很反常的需求,雙擊tab標(biāo)題掌呜,回到頁面頂部滓玖,哎,作為一名程序猿首先想到的是pk掉质蕉,無奈之下做了本功能势篡。于是就發(fā)現(xiàn)了google 的sdk里面的bug,哎模暗,寫這些代碼的人多半是實(shí)習(xí)生(鍋先甩出去殊霞,逃~~)

實(shí)現(xiàn)雙擊回頂部

這里的實(shí)現(xiàn)實(shí)際上很簡(jiǎn)單,唯一難點(diǎn)在于怎么區(qū)分單擊還是雙擊(tab切換)汰蓉。不多說,很快就寫出如下代碼:

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                isClickOnce = false;
                mSelectedPage = tab.getPosition();
              
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                int selectedPosition = tab.getPosition();
                if (selectedPosition == mSelectedPage) {
                    long currentTime = System.currentTimeMillis();
                    if (isClickOnce && currentTime - mLastPressTime <= DOUBLE_PRESS_INTERVAL) {
                        Fragment fragment = mPagerAdapter.getFragment(mSelectedPage);
                        if (fragment != null) {
          
                           ...
                        } else if (fragment != null) {
                            ...
                        }
                        isClickOnce = false;
                    } else {
                        isClickOnce = true;
                        mLastPressTime = currentTime;
                    }
                }
            }
        });

基本思想是是否是再次選中棒卷,如果是再次選中顾孽,則標(biāo)記為已單擊過一次,如果已單擊過一次且兩次間隔不超過雙擊時(shí)長(zhǎng)比规,則判定為雙擊若厚。 省略號(hào)為調(diào)用對(duì)應(yīng)fragment回到頂部的代碼。一般來說fragment的內(nèi)容為listView蜒什,調(diào)用scrollToPosition(0)就好测秸,或者其他情況自己實(shí)現(xiàn)。

寫完了代碼,來運(yùn)行一把霎冯,會(huì)發(fā)覺雙擊后沒有任何反應(yīng)铃拇,再次斷點(diǎn)你會(huì)發(fā)覺,也沒進(jìn)入斷點(diǎn)沈撞,沒辦法了慷荔,斷點(diǎn)源代碼回調(diào)的地方,你會(huì)發(fā)現(xiàn)缠俺,
斷點(diǎn)進(jìn)入了源代碼的回調(diào)了的显晶,那么是為什么沒有回調(diào)呢?

image.png

我們搜索mOnTabSelectedListener的使用

發(fā)覺1處賦值壹士。

 public void setOnTabSelectedListener(OnTabSelectedListener onTabSelectedListener) {
        mOnTabSelectedListener = onTabSelectedListener;
    }

正式本文的回調(diào)處磷雇。
奇怪,為什么沒回調(diào)呢躏救?
我們搜索setOnTabSelectedListener調(diào)用處唯笙。可以看到落剪,不僅我們賦值了睁本,系統(tǒng)也賦值了,坑呀忠怖。

image.png

系統(tǒng)在設(shè)置setupWithViewPager的時(shí)候呢堰,順便就設(shè)置了setOnTabSelectedListener,如果以前設(shè)置了的話凡泣,這里會(huì)覆蓋枉疼,蓋。鞋拟。骂维。。

所以sdk 的 setOnTabSelectedListener是設(shè)置有bug的贺纲。知道了原因航闺,我們想要獲取tabLayout的點(diǎn)擊事件,必須在setupWithViewPager其之后猴誊,相當(dāng)于我們覆蓋系統(tǒng)的潦刃,這時(shí),你會(huì)發(fā)覺我們的代碼有點(diǎn)小bug懈叹,

 public void onTabSelected(TabLayout.Tab tab) {
                isClickOnce = false;
                mSelectedPage = tab.getPosition();
              
            }

需要反選中viewPager(viewPager.setCurrentItem(mSelectedPage);)乖杠,不然,點(diǎn)擊切換不了Fragment澄成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胧洒,一起剝皮案震驚了整個(gè)濱河市畏吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卫漫,老刑警劉巖菲饼,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汛兜,居然都是意外死亡巴粪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門粥谬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肛根,“玉大人,你說我怎么就攤上這事漏策∨烧埽” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵掺喻,是天一觀的道長(zhǎng)芭届。 經(jīng)常有香客問我,道長(zhǎng)感耙,這世上最難降的妖魔是什么褂乍? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮即硼,結(jié)果婚禮上逃片,老公的妹妹穿的比我還像新娘。我一直安慰自己只酥,他們只是感情好褥实,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著裂允,像睡著了一般损离。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绝编,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天僻澎,我揣著相機(jī)與錄音,去河邊找鬼十饥。 笑死怎棱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绷跑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼凡资,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼砸捏!你這毒婦竟也來了谬运?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤垦藏,失蹤者是張志新(化名)和其女友劉穎梆暖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掂骏,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轰驳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弟灼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片级解。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖田绑,靈堂內(nèi)的尸體忽然破棺而出勤哗,到底是詐尸還是另有隱情,我是刑警寧澤掩驱,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布芒划,位于F島的核電站,受9級(jí)特大地震影響欧穴,放射性物質(zhì)發(fā)生泄漏民逼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一涮帘、第九天 我趴在偏房一處隱蔽的房頂上張望拼苍。 院中可真熱鬧,春花似錦焚辅、人聲如沸映屋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棚点。三九已至,卻和暖如春湾蔓,著一層夾襖步出監(jiān)牢的瞬間瘫析,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工默责, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贬循,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓桃序,卻偏偏與公主長(zhǎng)得像杖虾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媒熊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫奇适、插件坟比、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 我不記得什么時(shí)候開始,在家我不再光著腳丫子亂跑嚷往,而是時(shí)時(shí)刻刻的穿著拖鞋葛账; 也不記得從什么時(shí)候開始不再厭煩秋褲,不...
    dfffd66bf50d閱讀 262評(píng)論 0 0
  • Call it life experience or the school of hard knocks, by ...
    呆萌小地鼠閱讀 461評(píng)論 1 0
  • 早上起來點(diǎn)開海嵐老師的講座不知不覺又聽了一遍皮仁,因?yàn)殛愋」谙矚g畫畫籍琳,海嵐老師的講座我很有感觸,有媽媽私我怎么做畫畫啟...
    木木sani閱讀 222評(píng)論 0 0