RecyclerView实现左滑加载

背景

车载项目中,默认横屏,消息中心通过RecylerView展示各类消息,现在要求实现用户左滑获取更多消息并展示,实现方案是增加一个footerview布局,在原来的adpater上包裹一个新的adapter,监听用户滑动方向,这样做的好处是不需要修改原来的adapter,也不需要知道原来的adapter是怎么实现的。左滑和上滑只是方向的不同。

footview布局

定义一个footview.xml布局,里面是个loading的图片。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    >


    <ImageView
        android:id="@+id/loading_img"
        android:layout_width="60dp"
        android:layout_height="60dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_loading" />
</androidx.constraintlayout.widget.ConstraintLayout>

FootViewHolder

public class FootViewHolder extends BaseItemAdapter.BaseViewHolder {
   
    @Getter
    private ImageView loadingImg;

    public FootViewHolder(View itemView) {
   
        super(itemView);
        loadingImg = (ImageView) itemView.findViewById(R.id.loading_img);
    }
}

新的adapter

定义一个LoadMoreAdapter.java,构造方法中传入原来的adapter。

public class LoadMoreAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
   

    private RecyclerView.Adapter adapter;

    // 普通布局
    private static final int TYPE_ITEM = 1;
    // 脚布局
    private static final int TYPE_FOOTER = 2;
    // 当前加载状态
    private int loadState = 2;
    // 正在加载
    public static final int LOADING = 1;
    // 加载完成
    public static final int LOADING_COMPLETE = 2;
    // 左滑加载
    public</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用 RecyclerView 实现分页加载的一般流程如下: 1. 在布局文件中定义 RecyclerView 和一个加载更多时显示的进度条。 2. 创建一个 Adapter,继承自 RecyclerView.Adapter,实现数据的展示。 3. 在 Activity 或 Fragment 中初始化 RecyclerView 和 Adapter,并设置 LayoutManager。 4. 加载第一页数据。 5. 当用户滑动到列表底部时,触发加载更多数据的操作。 6. 在 Adapter 中添加一个方法,用于添加新的数据。 7. 在加载更多数据时,显示进度条,同时请求网络数据。 8. 当数据请求成功后,隐藏进度条,将新的数据添加到 Adapter 中,并通知 RecyclerView 刷新列表。 以下是一个简单的示例代码: ```java public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<MyData> mDataList = new ArrayList<>(); // 添加新的数据 public void addData(List<MyData> dataList) { mDataList.addAll(dataList); notifyDataSetChanged(); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 创建 ViewHolder ... } @Override public void onBindViewHolder(MyViewHolder holder, int position) { // 绑定数据 ... } @Override public int getItemCount() { return mDataList.size(); } } public class MyActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private MyAdapter mAdapter; private ProgressBar mProgressBar; private int mCurrentPage = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化 RecyclerView 和 Adapter mRecyclerView = findViewById(R.id.recycler_view); mAdapter = new MyAdapter(); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // 初始化进度条 mProgressBar = findViewById(R.id.progress_bar); // 加载第一页数据 loadMoreData(); } private void loadMoreData() { // 显示进度条 mProgressBar.setVisibility(View.VISIBLE); // 请求网络数据 MyApi.getData(mCurrentPage, new MyCallback<List<MyData>>() { @Override public void onSuccess(List<MyData> dataList) { // 隐藏进度条 mProgressBar.setVisibility(View.GONE); // 添加新的数据 mAdapter.addData(dataList); // 更新当前页数 mCurrentPage++; } @Override public void onFailure(Throwable t) { // 处理错误 } }); } // 监听 RecyclerView 的滑动事件 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 判断是否已经滑动到列表底部 if (!recyclerView.canScrollVertically(1)) { // 加载更多数据 loadMoreData(); } } }); } ``` 在这个示例中,我们使用了一个 mCurrentPage 变量来记录当前加载的页数。每次加载更多数据时,都会将当前页数加一,并将新的数据添加到 Adapter 中。 当用户滑动到列表底部时,我们会触发 loadMoreData() 方法来请求新的数据。在这个方法中,我们显示进度条,请求网络数据,并在成功后隐藏进度条,并将新的数据添加到 Adapter 中。 注意,在这个示例中,我们使用了一个 MyCallback 接口来处理网络请求的回调。你需要根据实际情况自己实现这个接口,并在 onSuccess() 方法中处理返回的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值