安卓實(shí)現(xiàn)點(diǎn)擊底部導(dǎo)航欄返回頂部&刷新功能

現(xiàn)在的app幾乎都是伴隨著底部導(dǎo)航欄,
頁面往往存在著ScrollView或者RecyclerView等可滑動的ViewGroup,
因此刷新返回頂部的功能是必備的融蹂,
通過點(diǎn)擊底部導(dǎo)航欄返回頂部刷新顯然是最合適的旺订,


先說明一下項目結(jié)構(gòu):

底部導(dǎo)航欄切換fragment的實(shí)現(xiàn)就是FrameLayout+tab,并在BaseBottomDelegate中加載超燃。

fragment內(nèi)容頁面定義一個抽象類BottomItemDelegate,并實(shí)現(xiàn)IClickTabListener接口区拳。

在具體的fragment內(nèi)容頁面重寫IClickTabListener方法。


首先意乓,需要先定義一個接口IClickTabListener樱调,以供具體的子類實(shí)現(xiàn)方法:

public interface IClickTabListener {

  /**
  * 點(diǎn)擊tab返回頂部
  */
  void onScrollToTop();

  /**
   * 判斷當(dāng)前頁面是否處于頂部
   * @return 是否位于頂部
   */
  boolean isTop();

   /**
   * 點(diǎn)擊tab刷新頁面
   */
  void onRefresh();
}

然后,在抽象fragment內(nèi)容頁面BottomItemDelegate實(shí)現(xiàn)該接口:

public abstract class BottomItemDelegate extends PocketDelegate implements IClickTabListener

在具體的子類中重寫IClickTabListener的方法:

public class HomeItemDelegate extends BottomItemDelegate{
  ... ...
   /**
   * 重寫父類的onScrollToTop(),使scrollView滾動到頂部
   */
  @Override
  public void onScrollToTop() {
    //設(shè)置toolbar的內(nèi)容自動滑出來
    mAppbar.setExpanded(true);
    //ScrollView滾動到頂部
    mScrollView.smoothScrollTo(0,0);
  }

  /**
   * 重寫父類的onRefresh()本涕,刷新當(dāng)前頁面
   */
  @Override
  public void onRefresh() {
    //刷新樣式出現(xiàn)
    mRefresh.setRefreshing(true);
    //刷新內(nèi)容頁面
    refreshNews();
  }

  @Override
  public boolean isTop() {
    //通過ScrollView.getScrollY()來判斷是否位于頂部
    return mScrollView.getScrollY() == 0;
  }
  ... ...
}

這里之所以使用Appbar.setExpanded(true)业汰,是因?yàn)樵谶@個頁面中我使用了CoordinatorLayout + AppBarLayout + V7.Toolbar 的嵌套結(jié)構(gòu),在頁面滾動的時候會自動隱藏toolbar菩颖,因此样漆,會存在一個問題,如果不添加這行代碼晦闰,ScrollView調(diào)用smoothScrollTo(0,0)toolbar并不會顯示出來放祟,這里要感謝知乎@鄭大俊提出的方法,剩下的幾個方法注釋應(yīng)該能容易看得到呻右,就不多解釋了跪妥。

最后,在BaseBottomDelegate中的tab底部導(dǎo)航欄的點(diǎn)擊事件中實(shí)現(xiàn)如下代碼即可:

public abstract class BaseBottomDelegate extends PocketDelegate 
        implements View.OnClickListener{
  ... ...
  @Override
  public void onClick(View view) {
    ... ...
    final int tag = (int) view.getTag();
    BottomItemDelegate currentDelegate = ITEM_DELEGATE.get(mCurrentDelegate);
    //如果已經(jīng)選中當(dāng)前頁面声滥,則再次點(diǎn)擊滾動到頂部眉撵。
    if (tag == mCurrentDelegate) {
        //如果已經(jīng)位于頂部,則刷新頁面
        if (currentDelegate.isTop()){
            currentDelegate.onRefresh();
            return;
        }
        currentDelegate.onScrollToTop();
        return;
    }
    ... ...
    //隱藏當(dāng)前fragment顯示點(diǎn)擊的fragment
    getSupportDelegate().showHideFragment(ITEM_DELEGATE.get(tag), currentDelegate);
    //重置tag為當(dāng)前所選中的fragment
    mCurrentDelegate = tag;
  }
  ... ...
}

這樣落塑,就實(shí)現(xiàn)了點(diǎn)擊底部導(dǎo)航欄按鈕實(shí)現(xiàn)返回頂部纽疟,再次點(diǎn)擊實(shí)現(xiàn)刷新的功能了!??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末憾赁,一起剝皮案震驚了整個濱河市污朽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌龙考,老刑警劉巖蟆肆,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晦款,居然都是意外死亡炎功,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門柬赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亡问,“玉大人,你說我怎么就攤上這事肛宋≈菖海” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵酝陈,是天一觀的道長床玻。 經(jīng)常有香客問我,道長沉帮,這世上最難降的妖魔是什么锈死? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任贫堰,我火速辦了婚禮,結(jié)果婚禮上待牵,老公的妹妹穿的比我還像新娘其屏。我一直安慰自己,他們只是感情好缨该,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布偎行。 她就那樣靜靜地躺著,像睡著了一般贰拿。 火紅的嫁衣襯著肌膚如雪蛤袒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天膨更,我揣著相機(jī)與錄音妙真,去河邊找鬼。 笑死荚守,一個胖子當(dāng)著我的面吹牛珍德,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播健蕊,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菱阵,長吁一口氣:“原來是場噩夢啊……” “哼踢俄!你這毒婦竟也來了缩功?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤都办,失蹤者是張志新(化名)和其女友劉穎嫡锌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琳钉,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡势木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歌懒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啦桌。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖及皂,靈堂內(nèi)的尸體忽然破棺而出甫男,到底是詐尸還是另有隱情,我是刑警寧澤验烧,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布板驳,位于F島的核電站,受9級特大地震影響碍拆,放射性物質(zhì)發(fā)生泄漏若治。R本人自食惡果不足惜慨蓝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望端幼。 院中可真熱鬧礼烈,春花似錦、人聲如沸婆跑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洽蛀。三九已至摹迷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郊供,已是汗流浹背峡碉。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驮审,地道東北人鲫寄。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像疯淫,于是被迫代替她去往敵國和親地来。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353