web-dev-qa-db-fra.com

Comment limiter le nombre d'articles dans RecyclerView?

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.)

6
Elliptica

À 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();
    }

}
9
jhashane

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)

2

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;
    }
1
Ranjith KP

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

1
GianhTran