为了账号安全,请及时绑定邮箱和手机立即绑定

Android开发之头部悬浮的上拉加载,下拉刷新的列表

标签:
Android

时间悬浮

带时间戳的列表,要求时间悬浮顶部,动态替换顶部时间如下图,如下图,


webp

image.png

布局实现

多布局实现,时间悬浮为一个布局,数据相关内容为一个布局,这里推荐一个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);
}

根据返回的ItemViewType来加载不同的布局,动态设置时间布局的显示

    @Overrideprotected 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;
    }
}

加载数据时根据时间比较,判断当前数据是头部数据还是普通数据,添加进集合中

          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;

注意数据的判断,正确进行头部数据的添加。

头部布局的创建

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

时间戳转换

    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();
}

将时间转化为xx月xx日的格式

文本展开与收起

默认情况下,最多只显示四行文本如下


webp

image.png


点击之后,展开所有文本


webp

image.png

具体实现如下:

     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);
        }
    }

下拉刷新,上拉加载自定义布局

设置下拉刷新,下拉加载的布局

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

具体实现可参考Demo,或者依赖库文档
刷新之后回调

        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);

        }

    });

下拉加载,上拉刷新布局如图,具体可运行demo查看


webp

image.png

webp

image.png



作者:木子饼干
链接:https://www.jianshu.com/p/223692b84f2d


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消