gpt4 book ai didi

Android RecyclerView 添加分页

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:14 25 4
gpt4 key购买 nike

我为我的应用程序创建了一个 RecyclerView 并试图找到一种方法来停止大量请求,我想获得 10 x 10 的结果并带有进度条。我的服务器将在每次向下滚动到最后一项时发送 10 x 10 的结果。

    public class ProfileActivityFriendsList extends AppCompatActivity {
String[] names={"Ander Herera","David De Gea","Michael Carrick","Juan Mata","Diego Costa","Oscar"};
String[] positions={"Midfielder","GoalKeeper", "Midfielder","Playmaker","Striker","Playmaker"};
String[] urls={"Midfielder","GoalKeeper", "Midfielder","Playmaker","Striker","Playmaker"};
int[] images = {R.mipmap.ic_launcher,R.mipmap.ic_launcher, R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_friends_list);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

//GET RECYCLER
RecyclerView rv = (RecyclerView) findViewById(R.id.myRecycler);
//SET LAYOUT
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setItemAnimator(new DefaultItemAnimator());
//ADAPTER
MyAdapter adapter = new MyAdapter(this, names, positions, urls, images);
rv.setAdapter(adapter);
}
}

这是我的适配器类。

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
Context c;
String[] names;
String[] positions;
String[] urls;
int[] img;

public MyAdapter(Context ctx, String[] names, String[] positions,String[] urls, int[] images){
this.c=ctx;
this.names = names;
this.positions = positions;
this.img = images;
this.urls = urls;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.friend_list_model,null);

MyHolder holder = new MyHolder(v);
return holder;
}

@Override
public void onBindViewHolder(MyHolder holder, final int position) {
holder.imageView.setImageResource(img[position]);
holder.name.setText(names[position]);
holder.desc.setText(positions[position]);

holder.serItemClickListener(new ItemClickListener() {
@Override
public void onItemClick(View v, int pos) {
Snackbar.make(v,positions[position]+" "+positions[position],Snackbar.LENGTH_LONG).show();
}
});
}

@Override
public int getItemCount() {
return names.length;
}
}

这是持有人。

public class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
CircleImageView imageView;
TextView name;
TextView desc;
ItemClickListener itemClickListener;
public MyHolder(View itemView) {
super(itemView);

imageView = (CircleImageView) itemView.findViewById(R.id.circleImageView1);
name = (TextView) itemView.findViewById(R.id.textName);
desc = (TextView) itemView.findViewById(R.id.textDesc);
itemView.setOnClickListener(this);
}

@Override
public void onClick(View v) {
this.itemClickListener.onItemClick(v,getLayoutPosition());
}
public void serItemClickListener(ItemClickListener ic){
this.itemClickListener = ic;
}
}

我看了很多教程,但找不到明确的解决方案,我认为有一些方法可以做到,但我不知道我的代码是否可以添加它?

最佳答案

我们所做的是使用 ReyclerView.OnScrollListener .假设您使用的是 LinearLayoutManager,您可以检查当前显示的项目与总数以确定何时到达最后一个项目,然后请求下一页。您还需要进行一些额外的逻辑检查以提前结束以防止“垃圾邮件”,因为滚动甚至会发生很多次。

例如:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (!hasMoreContent()) {
return;
}

if (currentlyLoadingInitialRequest()) {
return;
}

if (alreadyLoadingNextPage()) {
return;
}

if (isInErrorState()) {
return;
}

LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int total = layoutManager.getItemCount();
int currentLastItem = layoutManger.findLastVisibleItemPosition();
if (currentLastItem == total - 1) {
requestNextPage();
}
});

关于Android RecyclerView 添加分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com