032android智能下拉刷新框架-smartrefreshlayout+recyclerview的使用(代码片段)

luckyplj luckyplj     2022-12-11     736

关键词:

1.SmartRefreshLayout介绍

  SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。

2.使用步骤

(1)在 build.gradle (app)中添加依赖

    implementation ‘com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-26‘
    implementation ‘com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-26‘//没有使用特殊Header,可以不加这行
    implementation ‘com.android.support:design:28.0.0‘

(2)布局文件(使用SmartRefreshLayout和RecyclerView)

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:scrollbars="vertical"
        android:background="#fff" />

</com.scwang.smartrefresh.layout.SmartRefreshLayout>

(3)RecyclerView的item布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="28dp"
        android:textSize="16sp"
        android:textStyle="bold"
        android:text="hehe"/>

</RelativeLayout>

(4)java后台

package com.example.administrator.test65smartrefreshlayout;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.listener.SimpleMultiPurposeListener;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity 

    RecyclerView mRecyclerView;
    MyAdapter mAdapter;
    LinearLayoutManager mLayoutManager;
    RefreshLayout refreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        mRecyclerView = findViewById(R.id.my_recycler_view);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
        mRecyclerView.setHasFixedSize(true);
        mAdapter = new MyAdapter(getDatas());
        mRecyclerView.setAdapter(mAdapter);
    

    private void initView() 
        refreshLayout = findViewById(R.id.refreshLayout);
        /**
         * 设置不同的头部、底部样式
         */
//        refreshLayout.setRefreshFooter(new ClassicsFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
//        refreshLayout.setRefreshHeader(new BezierRadarHeader(this));
//        refreshLayout.setRefreshHeader(new TwoLevelHeader(this));
        refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

        refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));

        //设置样式后面的背景颜色
        refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);

        //设置监听器,包括顶部下拉刷新、底部上滑刷新
        refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener()

            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) 
                mAdapter.refreshData(MoreDatas()); //下拉刷新,数据从上往下添加到界面上
                refreshLayout.finishRefresh(1000); //这个记得设置,否则一直转圈
            

            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) 
                mAdapter.loadMore(MoreDatas());  //上滑刷新,数据从下往上添加到界面上
                refreshLayout.finishLoadMore(1000); //这个记得设置,否则一直转圈
            
        );

    

    //原始的recyclerView数据
    private ArrayList<String> getDatas() 
        ArrayList<String> data = new ArrayList<>();
        String temp = " item";
        for(int i = 0; i < 15; i++) 
            data.add(i + temp);
        
        return data;
    

    //刷新得到的数据
    private ArrayList<String> MoreDatas() 
        ArrayList<String> data = new ArrayList<>();
        String temp = "新加数据 ";
        for(int i = 0; i < 6; i++) 
            data.add(temp + i);
        
        return data;
    

    public static class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> 

        public ArrayList<String> datas = null;

        public MyAdapter(ArrayList<String> datas) 
            this.datas = datas;
        

        //创建新View,被LayoutManager所调用
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) 
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_smartrefreshlayout_item,viewGroup,false);
            ViewHolder vh = new ViewHolder(view);
            return vh;
        

        //将数据与界面进行绑定的操作
        @Override
        public void onBindViewHolder(ViewHolder viewHolder, int position) 
            viewHolder.mTextView.setText(datas.get(position));
        

        //获取数据的数量
        @Override
        public int getItemCount() 
            return datas.size();
        

        //底部上拉刷新,数据直接在底部显示
        public void loadMore(ArrayList<String> strings) 
            datas.addAll(strings);
            notifyDataSetChanged();
        

        //底部下拉刷新,数据直接从上往下添加数据,显示在顶部
        public void refreshData(ArrayList<String> strings) 
            datas.addAll(0, strings);
            notifyDataSetChanged();
//            notifyItemInserted(0); 一次只能加一项数据
        

        //自定义的ViewHolder,持有每个Item的的所有界面元素
        public static class ViewHolder extends RecyclerView.ViewHolder 
            public TextView mTextView;
            public ViewHolder(View view)
                super(view);
                mTextView = view.findViewById(R.id.text);
            
        
    

3.效果图

技术图片

 

如何在android中实现下拉刷新?

】如何在android中实现下拉刷新?【英文标题】:Howtoimplementpulldownrefreshinandroid?【发布时间】:2014-01-2919:37:02【问题描述】:目前我正在研究一个片段,它只是一个带有框架布局的webview,问题是,我想做一些类似下拉刷新的事情... 查看详情

李明杰控件刷新框架

....com/CoderMJLeeMJRefreshTheeasiestwaytousepull-to-refresh用法最简单的下拉刷新框架:一行代码搞定ContentsGettingStartedFeatures【支持哪些控件的刷新】Installation【如何使用MJRefresh】Who'susing【已经超过上百个App正在使用MJRefresh】Classes【MJRe... 查看详情

pulltorefreshrecylerview下拉刷新上拉加载,支持自能预加载,可定制的底部(代码片段)

...是一个下拉刷新上拉加载更多框架,头部用的秋哥的android-Ultra-Pull-To-Refresh,底部和没有数据的状态自己实现的。特点可定制的头部(可以查看android-Ultra-Pull-To-Refresh文档)可定制的底部(加载中/没有数据/加载失败三种状态... 查看详情

pulltorrefresh自定义下拉刷新动画

首先,下载著名的刷新框架https://github.com/chrisbanes/Android-PullToRefresh,其中simple为demo,library和extras作为项目包导入到simple中一,定义刷新动画的layout在library下的com.handmark.pulltorefresh.library.internal包中的FlipLoadingLayout和Rota 查看详情

mjrefresh框架介绍--(简单的下拉刷新)

   一.MJRefresh的类解释.1.MJRefreshComponent       所有刷新控件的基类别.(component:成分,组件)2.MJRefreshNormalHeader     默认的下拉刷新控件3.MJRefreshAut 查看详情

iosuitableview-下拉刷新上拉加载

本文主要内容:UITableView下拉刷新、上拉加载的实现。2017-03-17更新:代码更新到Swift3实现的效果如下:实现方式:使用MJRefresh框架。关于MJRefresh框架:MJRefresh框架是李明杰老师制作的开源框架,使用MJRefresh... 查看详情

提取在 Smartr 中看到的社交资料信息

】提取在Smartr中看到的社交资料信息【英文标题】:PullingsocialprofileinformationasseeninSmartr【发布时间】:2012-01-2416:51:45【问题描述】:是否有任何现有的API或示例可以做到这一点?我想在不要求用户手动将他们的帐户连接到我们的... 查看详情

listview上拉加载,下拉刷新pulltorefresh的使用

...用起来也十分方便。(下载地址:https://github.com/chrisbanes/Android-PullToRefresh) 查看详情

使用mui框架,模拟手机端的下拉刷新,上拉加载操作。

...个框架:http://dev.dcloud.net.cn/mui/那么如何实现上拉刷新,下拉加载的功呢?首先需要一个容器:1<!--下拉刷新容器-->2<divid="refreshContainer"class="mui-contentmui-scroll-wrappe 查看详情

android下拉刷新之scrollview--pulltorefreshscrollview

 下拉刷新之ScrollView--PullToRefreshScrollView 查看详情

mui实现上拉刷新和下拉加载

...功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机上,DIV动画经常出现卡顿现象(特别是图文列表的情况);mui通过双webview解决这个DIV的拖动流畅度问题;拖动时,拖动的不是div,而是一个完整的webview(子webview... 查看详情

android页面下拉刷新(代码片段)

关于页面下拉刷新publicclassFrag_01extendsFragmentimplementsXListView.IXListViewListenerprivateStringpath="http://www.xieast.com/api/news/news.php?page=";privateXListViewxlistview;privateintnum=1;privateList& 查看详情

下拉刷新swiperefreshlayout

把想要实现下拉刷新的控件放在SwipeRefreshLayout中,就可以直接支持下拉刷新<android.support.v4.widget.SwipeRefreshLayoutandroid:id="@+id/swipe_refresh"android:layout_width="match_parent"android:layout_height="match_parent"app:l 查看详情

android自定义下拉刷新动画--仿百度外卖下拉刷新

好久没写博客了,小编之前一段时间一直在找工作,从天津来到了我们的大帝都,感觉还不错。好了废话不多说了,开始我们今天的主题吧。现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都... 查看详情

android下拉刷新怎么实现

具体操作步骤可参考:1、下拉刷新一般都是用在listView组件中,给listView添加listHeadView自定义组件,即com.example.pulltorefreshtest.RefreshableView;2、在activity中取得自定义的组件listHeadVIew;3、给自定义组件添加事件;4、在Activity中调用... 查看详情

android下拉刷新滚动到底部自动加载更多recyclerview组件

RecyclerView实现下拉刷新和自动加载开源组件,有滚动到底部加载更多以及添加header的功能。​​AndroidLRecyclerView实现下拉刷新,滑动到底部自动加载更多​​​ 查看详情

pulltorefreshgridview上拉刷新,下拉加载

PullToRefreshGridView上拉刷新,下拉加载 布局:1<?xmlversion="1.0"encoding="utf-8"?>2<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"3xmlns:tools="http://schemas.android.com/ 查看详情

swiperefreshlayout下拉刷新

1.SwipeRefreshLayout是Google在supportv419.1版本的library更新的一个下拉刷新组件,实现刷新效果更方便。弊端:只有下拉 //设置刷新控件圈圈的颜色swipe_refresh_layout.setColorSchemeResources(android.R.color.holo_blue_light,android.R.color.holo_ora 查看详情