android 不用java,Android Paging简单使用,没有多余库,而且只用java

只依赖这个库

implementation 'android.arch.paging:runtime:1.0.1'

LiveData> 用LivePagedListBuilder生成,

LivePagedListBuilder 用 DataSource.Factory 和PagedList.Config.Builder 生成,

DataSource.Factory 用 PositionalDataSource生成

PositionalDataSource是DataSource的子类

同时还有PageKeyedDataSource 和ItemKeyedDataSource

import android.arch.lifecycle.LiveData;

import android.arch.lifecycle.Observer;

import android.arch.paging.DataSource;

import android.arch.paging.LivePagedListBuilder;

import android.arch.paging.PagedList;

import android.arch.paging.PagedListAdapter;

import android.arch.paging.PositionalDataSource;

import android.graphics.Color;

import android.os.Bundle;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.util.DiffUtil;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final MyAdapter mAdapter = new MyAdapter();

PagedList.Config config = new PagedList.Config.Builder()

.setPageSize(10) //配置分页加载的数量

.setEnablePlaceholders(false) //配置是否启动PlaceHolders

.setInitialLoadSizeHint(10) //初始化加载的数量

.build();

/**

* LiveData> 用LivePagedListBuilder生成

* LivePagedListBuilder 用 DataSource.Factory 和PagedList.Config.Builder 生成

* DataSource.Factory 用 PositionalDataSource

*/

LiveData> liveData = new LivePagedListBuilder(new MyDataSourceFactory(), config)

// .setBoundaryCallback(null)

// .setFetchExecutor(null)

.build();

liveData.observe(this,new Observer>() {

@Override

public void onChanged(@Nullable PagedList dataBeans) {

mAdapter.submitList(dataBeans);

}

});

RecyclerView mRecyclerView = findViewById(R.id.mRecyclerView);

LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);

mRecyclerView.setLayoutManager(mLayoutManager);

mRecyclerView.setAdapter(mAdapter);

}

private class DataBean {

public int id;

public String content;

}

private class MyDataSourceFactory extends DataSource.Factory{

@Override

public DataSource create() {

return new MyDataSource();

}

}

private class MyDataSource extends PositionalDataSource {

@Override

public void loadInitial(@NonNull LoadInitialParams params,@NonNull LoadInitialCallback callback) {

callback.onResult(loadData(0, 10),0,10);

}

@Override

public void loadRange(@NonNull LoadRangeParams params

,@NonNull LoadRangeCallback callback) {

callback.onResult(loadData(params.startPosition, 10));

}

}

/**

* 假设这里需要做一些后台线程的数据加载任务。

*

* @param startPosition

* @param count

* @return

*/

private List loadData(int startPosition,int count) {

List list = new ArrayList();

for (int i = 0; i < count; i++) {

DataBean data = new DataBean();

data.id = startPosition + i;

data.content = "测试的内容=" + data.id;

list.add(data);

}

return list;

}

private class MyAdapter extends PagedListAdapter {

public MyAdapter() {

super(mDiffCallback);

}

@Override

public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {

View view = LayoutInflater.from(getApplicationContext()).inflate(android.R.layout.simple_list_item_2,null);

MyViewHolder holder = new MyViewHolder(view);

return holder;

}

@Override

public void onBindViewHolder(MyViewHolder holder,int position) {

DataBean data = getItem(position);

holder.text1.setText(String.valueOf(position));

holder.text2.setText(String.valueOf(data.content));

}

}

private DiffUtil.ItemCallback mDiffCallback = new DiffUtil.ItemCallback() {

@Override

public boolean areItemsTheSame(@NonNull DataBean oldItem,@NonNull DataBean newItem) {

Log.d("DiffCallback","areItemsTheSame");

return oldItem.id == newItem.id;

}

@Override

public boolean areContentsTheSame(@NonNull DataBean oldItem,@NonNull DataBean newItem) {

Log.d("DiffCallback","areContentsTheSame");

return (oldItem == newItem);

}

};

private class MyViewHolder extends RecyclerView.ViewHolder {

public TextView text1;

public TextView text2;

public MyViewHolder(View itemView) {

super(itemView);

text1 = itemView.findViewById(android.R.id.text1);

text1.setTextColor(Color.RED);

text2 = itemView.findViewById(android.R.id.text2);

text2.setTextColor(Color.BLUE);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Paging3 是一个用于在 Android 应用中实现分页加载数据的开源。它是 Google 官方发布的最新版本的 Paging ,相较于以往的版本,Paging3 在实现简单、功能强大和性能优化方面有了很大的改进。 首先,Android Paging3 提供了强大的数据加载和显示机制。它通过将数据分割成固定大小的数据块 (page),并在需要时按需加载和展示数据,实现了无限滚动加载的效果。相较于传统的 RecyclerView 分页加载,Paging3 更加灵活,可以自动处理数据的加载和卸载,无需手动实现判断是否到底部、加载更多等繁琐逻辑。同时,Paging3 还支持局部刷新、数据源无缝替换等操作,让数据的加载和显示更加简单和高效。 其次,Paging3 在性能方面进行了优化。它使用了异步数据加载和显示机制,可以在后台线程上进行数据加载,不会阻塞主线程。同时,Paging3 采用了数据预加载和缓存策略,可以将下一页的数据提前加载到内存中,从而提高用户体验和应用的响应速度。并且,Paging3 还支持数据的持久化存储,可以将加载的数据缓存到本地数据或文件中,避免了重复加载数据的开销。 最后,Paging3 还提供了丰富的扩展功能和灵活的定制选项。开发者可以自定义数据加载策略、数据源类型、数据显示方式等,以满足不同的业务需求。同时,Paging3 还提供了相关的辅助类和工具方法,帮助开发者更加便捷地实现数据的分页加载和显示。 总结来说,Android Paging3 是一个功能强大、性能优越的分页加载,可以帮助开发者轻松实现数据的分页加载和显示,提高应用的用户体验和性能表现。无论是处理大量数据的列表页,还是实现无限滚动加载的功能,Paging3 都是一个值得推荐的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值