Android開發(fā)之頭部懸浮的上拉加載,下拉刷新的列表

時間懸浮

帶時間戳的列表揭蜒,要求時間懸浮頂部横浑,動態(tài)替換頂部時間如下圖,如下圖屉更,


image.png

布局實現(xiàn)

多布局實現(xiàn)伪嫁,時間懸浮為一個布局,數(shù)據(jù)相關(guān)內(nèi)容為一個布局偶垮,這里推薦一個Adapter依賴庫BRVAH

    public InformationAdapter(@Nullable List<Information> data) {
    super(data);
    addItemType(ITEM_STICK, R.layout.item_stock_sticky_head);
    addItemType(ITEM_DATA, R.layout.item_information);
}

根據(jù)返回的ItemViewType來加載不同的布局张咳,動態(tài)設(shè)置時間布局的顯示

    @Override
protected void convert(BaseViewHolder helper, Information item) {
    switch (helper.getItemViewType()) {
        case 1:
            helper.setVisible(R.id.tv_stock_name, true);
            helper.setText(R.id.tv_stock_name, item.pinnedHeaderName);
            break;
        case 2:
            int timeInt = item.getArticle_time();
            String s = String.valueOf(timeInt);
            String time = AppUtils.getStrTime(s);
            helper.setText(R.id.btn_time, time);
            Log.d("haha", "convert: 時間 : " + time);
            Log.d("haha", "convert: " + item.getArticle_title());
            helper.setText(R.id.txt_title, item.getArticle_title()).addOnClickListener(R.id.txt_title);
            helper.setText(R.id.txt_content, item.getArticle_content());
            helper.setText(R.id.txt_zan, " " + item.getArticle_like_count()).addOnClickListener(R.id.txt_zan);
            helper.setText(R.id.txt_kankong, " " + item.getArticle_dislike_count());
            break;
    }
}

加載數(shù)據(jù)時根據(jù)時間比較帝洪,判斷當(dāng)前數(shù)據(jù)是頭部數(shù)據(jù)還是普通數(shù)據(jù),添加進(jìn)集合中

          case STATE_REFREH:

                timeString = "月";
                mInformationAdapter.getData().clear();
                for (Information information : informationList) {
                    String s = transForDate(information.getArticle_time());
                    if (!s.equals(timeString)) {
                        newList.add(new Information(Information.ITEM_STICK, s));
                        timeString = s;
                    }
                    Log.d(TAG, "showData: " + s);
                    information.setItemType(Information.ITEM_DATA);
                    newList.add(information);

                }
                mInformationAdapter.addData(newList);
                break;

注意數(shù)據(jù)的判斷脚猾,正確進(jìn)行頭部數(shù)據(jù)的添加葱峡。

頭部布局的創(chuàng)建

  mHeaderItemDecoration = new PinnedHeaderItemDecoration.Builder(Information.ITEM_STICK).create();
    mRecyclerCoinCircle.addItemDecoration(mHeaderItemDecoration);

時間戳轉(zhuǎn)換

    public static String transForDate(Integer ms) {
    String str = "";
    if (ms != null) {
        long msl = (long) ms * 1000;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        if (ms != null) {
            try {
                str = sdf.format(msl);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    String[] split = str.split("-");
    StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(split[1] + "月").append(split[2] + "日");
    return stringBuffer.toString();
}

將時間轉(zhuǎn)化為xx月xx日的格式

文本展開與收起

默認(rèn)情況下,最多只顯示四行文本如下


image.png

點擊之后龙助,展開所有文本


image.png

具體實現(xiàn)如下:

     TextView textView = (TextView) adapter.getViewByPosition(mRecyclerCoinCircle, position, R.id.txt_content);
    if (textView != null) {
        if (isClick.containsKey(position)) {
            if (isClick.get(position)) {
                textView.setMaxLines(4);
                isClick.put(position, false);
            } else {
                textView.setMaxLines(1000);
                isClick.put(position, true);
            }
        } else {
            textView.setMaxLines(1000);
            isClick.put(position, true);
        }
    }

下拉刷新砰奕,上拉加載自定義布局

設(shè)置下拉刷新,下拉加載的布局

    mEasyLayout.setRefreshHeadView(new RefreshHeaderView(this));
    mEasyLayout.setLoadMoreView(new LoadMoreView(this));

具體實現(xiàn)可參考Demo提鸟,或者依賴庫文檔
刷新之后回調(diào)

        mEasyLayout.addEasyEvent(new EasyRefreshLayout.EasyEvent() {
        @Override
        public void onRefreshing() {
            page =1;
            state = STATE_REFREH;
            getReFreshData();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {

                    mEasyLayout.refreshComplete();
                }
            }, 1000);

        }

        @Override
        public void onLoadMore() {
            page++;
            state = STATE_MORE;
            getInformationData();

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mEasyLayout.loadMoreComplete();
                }
            }, 1000);

        }

    });

下拉加載军援,上拉刷新布局如圖,具體可運(yùn)行demo查看


image.png
image.png

爬過的坑

在頭部懸浮称勋,結(jié)合上拉刷新下拉加載過程中胸哥,遇到過上拉加載,導(dǎo)致頭部懸浮布局錯位赡鲜,先前采用
SmartRefreshLayout空厌,由于SmartRefreshLayout上拉加載會將布局向上頂,導(dǎo)致懸浮布局錯誤银酬,調(diào)試無果后嘲更,采用EasyRefreshLayout

總結(jié)

頭部懸浮的上拉加載揩瞪,下拉刷新的列表主要實現(xiàn)采用Adapter依賴庫BRVAH及其推薦相關(guān)庫EasyRefreshLayoutRecyclerView粘性標(biāo)簽庫赋朦。其他更多用法,可以自行訪問相關(guān)庫學(xué)習(xí)李破。
最后給出DEMO.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宠哄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喷屋,更是在濱河造成了極大的恐慌,老刑警劉巖瞭恰,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯曹,死亡現(xiàn)場離奇詭異,居然都是意外死亡惊畏,警方通過查閱死者的電腦和手機(jī)恶耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颜启,“玉大人偷俭,你說我怎么就攤上這事$终担” “怎么了涌萤?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵淹遵,是天一觀的道長。 經(jīng)常有香客問我负溪,道長透揣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任川抡,我火速辦了婚禮辐真,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崖堤。我一直安慰自己侍咱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布密幔。 她就那樣靜靜地躺著楔脯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪老玛。 梳的紋絲不亂的頭發(fā)上淤年,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音蜡豹,去河邊找鬼麸粮。 笑死,一個胖子當(dāng)著我的面吹牛镜廉,可吹牛的內(nèi)容都是我干的弄诲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼娇唯,長吁一口氣:“原來是場噩夢啊……” “哼齐遵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塔插,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梗摇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后想许,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伶授,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年流纹,在試婚紗的時候發(fā)現(xiàn)自己被綠了糜烹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡漱凝,死狀恐怖疮蹦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茸炒,我是刑警寧澤愕乎,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布阵苇,位于F島的核電站,受9級特大地震影響妆毕,放射性物質(zhì)發(fā)生泄漏慎玖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一笛粘、第九天 我趴在偏房一處隱蔽的房頂上張望趁怔。 院中可真熱鬧,春花似錦薪前、人聲如沸润努。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺浇。三九已至,卻和暖如春垛膝,著一層夾襖步出監(jiān)牢的瞬間鳍侣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工吼拥, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留倚聚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓凿可,卻偏偏與公主長得像惑折,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子枯跑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,754評論 25 707
  • 1惨驶、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 原文鏈接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影閱讀 32,910評論 6 472
  • 好不容易開始上健身房,運(yùn)動一小時敛助,體會久違的運(yùn)動后滿足感粗卜,爽爽的,腦子挺清楚纳击,一掃疲備续扔,喝了點運(yùn)動營養(yǎng)素,期待明天...
    D6_李曉紅Dorothy閱讀 180評論 0 0
  • 踐行日記 ?2017年12月2日 踐行第12天 城市:宜興 姓名:郭靜 一评疗、[設(shè)定目標(biāo)(3件幫助人的好事)]: 1...
    靜a靜閱讀 332評論 0 0