本文介绍了Android RecyclerView添加分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我为我的应用程序创建了一个RecyclerView,并试图找到一种方法来停止大量请求,我想通过进度条以10乘10的结果.我的服务器将在每次向下滚动到最后一项时将结果10乘10发送.
I created a RecyclerView for my application and trying to find a way to stop huge requests, I want to get the results 10 by 10 with a progress bar. My server will send the results 10 by 10 on every scrolldown to last item.
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;
}
}
我看了很多教程,找不到一个明确的解决方案,我认为有一些方法可以做到,但是我不知道我的代码是否可以添加它?
I watched lots of tutorials and couldn't find a clear solution, I think there are some ways to do it but I don't know is my code available to add it?
推荐答案
您可以尝试以下方法:
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) //check for scroll down
{
visibleItemCount = mLayoutManager.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
pastVisibleItems = mLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
loading = false;
if (adapter.countOfShowing < adapter.allChallenges.size()) {
Log.e("...", "Last Item Wow !");
adapter.increaseCountOfShowing();
adapter.notifyDataSetChanged();
}
loading = true;
//Do pagination.. i.e. fetch new data
}
}
}
}
});
这篇关于Android RecyclerView添加分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!