Android 通过SmartRefreshLayout+RecyclerView实现上拉加载和下来刷新!

第一步引入SmartRefreshLayout+RecyclerView包

implementation ("com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-28")
implementation ("com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-28")
implementation ("androidx.recyclerview:recyclerview:1.1.0")

第二步实现布局

  <com.scwang.smartrefresh.layout.SmartRefreshLayout
                android:id="@+id/refreshView"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/recyclerview3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    />
  </com.scwang.smartrefresh.layout.SmartRefreshLayout>

第三步Activity主要代码

SmartRefreshLayout smartRefreshLayout;
RecyclerView recyclerView;recyclerView = findViewById(R.id.recyclerview3);
smartRefreshLayout=findViewById(R.id.refreshView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
cList  = new ArrayList<>(); //为自己的数据集合
recyclerView.setLayoutManager(layoutManager);
//下拉刷新和上拉加载监听
//设置下拉刷新和上拉加载样式,默认样式
smartRefreshLayout.setRefreshHeader(new ClassicsHeader(this));
smartRefreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
//下拉刷新和上拉加载更新数据
smartRefreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener(){
    @Override
    public void onRefresh(@NonNull RefreshLayout refreshLayout) {
        super.onRefresh(refreshLayout);
        onRefsh();
        smartRefreshLayout.finishRefresh(1000);
    }

    @Override
    public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
        super.onLoadMore(refreshLayout);
        smartRefreshLayout.finishLoadMore(2000);
        //获取试图总条目
        int count = adapter.getItemCount();
        //如果当前试图总条目==集合长度
        if (count == mList.size()) {
            smartRefreshLayout.finishLoadMore(1000);
            Toast.makeText(this, "数据已全部加载完成", Toast.LENGTH_SHORT).show();
        }else{
            //上拉每次取10条记录加到cList中
            pageNo++;
            if(pageSize<mList.size()){
                getData(pageNo*10,pageSize);
            }else{
                getData(pageNo*10,mList.size());
            }
            adapter.notifyDataSetChanged();
            smartRefreshLayout.finishLoadMore(2000);
        }

    }
});

//首次进入页面自动刷新
smartRefreshLayout.autoRefresh();
public  void onRefsh(){
    cList.clear();
    if(pageSize>mList.size()){
        pageSize = mList.size();
    }
    getData(0,pageSize);
    refleshAdapter(cList);
}

private void refleshAdapter(List<MTORDER_INSite> cl){
    adapter=new SQLiteQueryAdapter(cl);
    recyclerView.setAdapter(adapter);
    /*3、添加item的添加和移除动画, 这里我们使用系统默认的动画*/
    recyclerView.setItemAnimator(new DefaultItemAnimator());
}

public void getData(int pageNo,int pageSize){
    for (int i = pageNo; i < pageSize; i++) {
        cList.add(mList.get(i));
    }
}

Adapter代码

public class SQLiteQueryAdapter extends RecyclerView.Adapter<SQLiteQueryAdapter.InnerHolder> {

    //从数据源获取的数组存入list,demo的数据源是模拟,在代码中生成
    private List<MTORDER_INSite> list;

    //1.定义接口
    public interface OnClickListener {
        void onClick(View v, int position);
    }

    public interface OnUpdateClickListener {
        void onClick(View v, int position);
    }
    public interface OnDeleteClickListener {
        void onClick(View v, int position);
    }
    public interface OnLongClickListener {
        void onLongClick(View v, int position);
    }

    //2.声明接口
    private OnClickListener onClickListener;
    private OnUpdateClickListener OnUpdateClickListener;
    private OnDeleteClickListener OnDeleteClickListener;
    private OnLongClickListener onLongClickListener;

    //3.set接口
    public void setOnUpdateClickListener(OnUpdateClickListener onUpdateClickListener) {
        this.OnUpdateClickListener = onUpdateClickListener;
    }
    public void setOnDeleteClickListener(OnDeleteClickListener onDeleteClickListener) {
        this.OnDeleteClickListener = onDeleteClickListener;
    }
    public void setOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }
    public void setOnLongClickListener(OnLongClickListener onLongClickListener) {
        this.onLongClickListener = onLongClickListener;
    }

    public SQLiteQueryAdapter(List<MTORDER_INSite> list) {
        this.list = list;
    }

 
    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //将XML布局文件,加载到Java代码(和Activity的onCreate()的setContentVIew()作用一样),参数先复制粘贴,感兴趣可去研究传不同参数的效果
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_listsqlite, null, false);
        //设置背景也可以在XML中设置
        view.setClickable(true);
        return new InnerHolder(view);
    }

    @SuppressLint("ResourceAsColor")
    @Override
    public void onBindViewHolder(@NonNull InnerHolder holder, @SuppressLint("RecyclerView") int position) {

        holder.textViewSdate.setText(list.get(position).KF_IDNAME);
        holder.textViewCl.setText(list.get(position).PUR_ORDER_ID+"|"+list.get(position).SDATE);
        holder.textViewQdOutId.setText(list.get(position).KF_ID+"");
        if(list.get(position).MESSAGE.contains("上传成功")){
            holder.textViewMemo.setTextColor(R.color.green);
        }else if(list.get(position).MESSAGE.contains("上传失败")){
            holder.textViewMemo.setTextColor(R.color.red);
        }else{
            holder.textViewMemo.setTextColor(R.color.colorConfirm);
        }
        holder.textViewMemo.setText(list.get(position).MESSAGE);

        if (onClickListener != null) {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onClickListener.onClick(v, position);
                }
            });
        }
        if (onLongClickListener != null) {
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onLongClickListener.onLongClick(v, position);
                    return true;
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }

    /**
     * 内部类,继承RecyclerView.ViewHolder,作用就是声明item中的控件,findViewById
     */
    public  class InnerHolder extends RecyclerView.ViewHolder   {
        TextView textViewSdate;
        TextView textViewCl;
        TextView textViewMemo;
        TextView textViewQdOutId;
        Button btnDel;

        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            textViewSdate = itemView.findViewById(R.id.rksdate);
            textViewCl = itemView.findViewById(R.id.rkOrderId);
            textViewQdOutId = itemView.findViewById(R.id.tkf_id);
            textViewMemo = itemView.findViewById(R.id.message);
        }

    }
}
  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个Android RecyclerView实现上拉刷新下拉加载和工具栏的示例代码: 在build.gradle文件中添加以下依赖项: ``` implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0' ``` 添加以下布局文件: ``` <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.widget.SwipeRefreshLayout> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> ``` 在Activity或Fragment中添加以下代码: ``` private SwipeRefreshLayout swipeRefreshLayout; private RecyclerView recyclerView; private Toolbar toolbar; private LinearLayoutManager layoutManager; private MyAdapter adapter; // 在onCreate中添加以下代码 swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout); recyclerView = findViewById(R.id.recycler_view); toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); adapter = new MyAdapter(dataList); recyclerView.setAdapter(adapter); swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.colorPrimary), getResources().getColor(R.color.colorAccent), getResources().getColor(R.color.colorPrimaryDark)); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { // 下拉刷新操作 // 可以在这里进行网络请求等操作 // 请求完成后,在主线程调用setRefreshing(false)方法结束刷新动画 swipeRefreshLayout.setRefreshing(false); } }); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && !recyclerView.canScrollVertically(1)) { // 上拉加载操作 // 可以在这里进行网络请求等操作 adapter.notifyDataSetChanged(); } } }); ``` 其中,MyAdapter是RecyclerView的适配器,dataList是数据列表。在适配器中,可以定义ViewHolder和绑定数据等方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值