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

时间悬浮

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

布局实现

多布局实现,时间悬浮为一个布局,数据相关内容为一个布局,这里推荐一个Adapter依赖库BRVAHpublic InformationAdapter(@Nullable List 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日的格式

文本展开与收起

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

点击之后,展开所有文本

AAffA0nNPuCLAAAAAElFTkSuQmCC

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查看

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

作者:木子饼干

链接:https://www.jianshu.com/p/223692b84f2d

你可能感兴趣的:(android下拉菜单刷新)