Comment puis-je limiter le nombre d'articles affiché par RecyclerView?
Je peux limiter le montant inséré si je remplace getChildCount
, mais cela ne fait qu'insérer ce nombre puis s'arrêter. Je veux qu'il continue d'insérer/faire défiler, mais seulement afficher X nombre d'éléments.
(Remarque: la hauteur de chaque article peut différer, il est donc important que la limite soit basée sur la quantité plutôt que sur une valeur codée en dur.)
À l'intérieur de la classe d'adaptateurs de Recyclerview;
private final int limit = 10;
@Override
public int getItemCount() {
if(ad_list.size() > limit){
return limit;
}
else
{
return ad_list.size();
}
}
Vous pouvez simplement remplacer la méthode getCount()
et tester si le tableau de données de l'adaptateur est supérieur à "DESIRED_MAX" puis renvoyer "DESIRED_MAX" sinon renvoyer simplement la longueur ou la taille du tableau de données (array/ArrayList)
Une solution consiste à définir la largeur de chaque enfant par programme,
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.MY_ITEM_TO_INFALTE, parent, false);
itemView.getLayoutParams().width = (int) (getScreenWidth() / NUMBERS_OF_ITEM_TO_DISPLAY); /// THIS LINE WILL DIVIDE OUR VIEW INTO NUMBERS OF PARTS
return new MyCreationItemAdapter.MyViewHolder(itemView);
}
public int getScreenWidth() {
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size.x;
}
si vous voulez qu'il continue d'insérer/faire défiler, mais n'affiche que le nombre X d'éléments, alors j'ai une solution: setVisibility
à VISIBLE pour X éléments, et l'autre est GONE.
public static final class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View view) {
super(view);
handleShowView(view);
}
private void handleShowView(View view) {
if (getAdapterPosition() > X - 1) {
view.setVisibility(View.GONE);
return;
}
view.setVisibility(View.VISIBLE);
}
}
j'espère que cela t'aides