我为我的应用程序创建了一个RecyclerView,并试图找到一种方法来阻止巨大的请求,我想得到10 × 10的结果,并带有进度条。我的服务器将在每次滚动到最后一项时发送10 × 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;
}
}
我看了很多教程,并没有找到一个明确的解决方案,我认为有一些方法可以做到这一点,但我不知道我的代码可以添加它?
4条答案
按热度按时间nhjlsmyf1#
我们所做的是使用ReyclerView.OnScrollListener。假设您使用的是
LinearLayoutManager
,您可以检查当前显示的项目与总计数,以确定何时到达最后一个项目,然后请求下一页。您还需要添加一些额外的逻辑检查,以提前退出,防止“垃圾邮件”,因为滚动甚至发生了很多次。例如:
bn31dyow2#
https://github.com/kunal-mahajan/PaginationAdeptor
我已经实现了分页组件/小部件,这是非常简单的实现。不需要xml只需要扩展类。例子是在上面的url与计时器任务和虚拟数据可用。在主要活动中,你可以改变数据的数量可用于测试目的在“最终int totalRecords”;如果有任何问题,将回答您的查询。谢谢Kunal
bjg7j2ky3#
您可以尝试以下方法:
46scxncf4#
同一Activity中有两个带分页的RecyclerView则获取滚动位置时出现问题。
第一个RecyclerView添加在折叠工具栏中,第二个RecyclerView添加在滚动中,然后第二个RecyclerView与分页一起工作。