2 votes

Comment définir la visibilité des 4 premiers éléments du recyclerView ?

En fait, j'ai un menu à partir duquel je peux ajouter des boutons dans mon activité principale dans une vue de recyclage et dans ce menu, je montre tous les boutons ajoutés afin que l'on puisse supprimer le bouton choisi.

Pour le gérer, j'ai fait en sorte que si la position du curseur est comprise entre 0 et 3, je ne ferai rien, mais je les cacherai de cette vue de recyclage et je ne montrerai que les éléments ajoutés.

enter image description here

Comme vous pouvez le voir sur ce dessin, le premier est mon activité principale avec 4 éléments par défaut et au-dessus d'eux, je montre l'élément ajouté, tandis que le deuxième est mon activité de réglage où j'ajoute les éléments supplémentaires, mais pour l'instant, il montre même les éléments par défaut que je voudrais cacher.

3voto

Cheticamp Points 22529

Une façon de résoudre ce problème est de manipuler le tableau de sauvegarde de manière à ce que les RecyclerView n'est pas au courant des vues manquantes. Une deuxième solution consiste à attribuer un type de vue différent, de hauteur nulle, aux positions manquantes. Un type pour les positions visibles et un autre pour les positions invisibles. Voici un exemple d'adaptateur qui met en œuvre ce concept :

RecyclerViewAdapter.java

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<String> mItems;

    RecyclerViewAdapter(List<String> items) {
        mItems = items;
    }

    @Override
    public @NonNull
    RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        if (viewType == INVISIBLE_ITEM_TYPE) {
            // The type is invisible, so just create a zero-height Space widget to hold the position.
            view = new Space(parent.getContext());
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0));
        } else {
            view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        }
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        ItemViewHolder vh = (ItemViewHolder) holder;
        String itemText = mItems.get(position);

        if (vh.getItemViewType() == VISIBLE_ITEM_TYPE) {
            // Only populate if a visible type.
            vh.mItemTextView.setText(itemText);
            int bgColor = (position % 2 == 0)
                ? android.R.color.holo_blue_light
                : android.R.color.holo_green_light;
            holder.itemView.setBackgroundColor(
                holder.itemView.getContext().getResources().getColor(bgColor));
        }
    }

    @Override
    public int getItemCount() {
        return (mItems == null) ? 0 : mItems.size();
    }

    @Override
    public int getItemViewType(int position) {
        // First 4 position don't show. The visibility of a position can be separately
        // determined if only, say, the first and third position should be invisible.
        return (position < 4) ? INVISIBLE_ITEM_TYPE : VISIBLE_ITEM_TYPE;
    }

    static class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView mItemTextView;

        ItemViewHolder(View item) {
            super(item);
            mItemTextView = item.findViewById(android.R.id.text1);
        }
    }

    private final static int VISIBLE_ITEM_TYPE = 1;
    private final static int INVISIBLE_ITEM_TYPE = 2;
}

Je posterais bien une vidéo, mais elle ne montrera que les RecyclerView en commençant par le point 4.

0voto

Adarsh Yashvanth Points 107

D'après mon niveau de compréhension de l'énoncé de votre problème, vous pouvez utiliser le code ci-dessous à l'intérieur onBindViewHolder de la classe adaptateur pour cacher les 4 premiers éléments.

rootView sera la vue parent de l'élément de vue du recycleur dans xml .

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    if (position <= 3) {
        holder.rootView.setVisiblity(GONE);
    }
    else {
        holder.rootView.setVisiblity(VISIBLE);
    }
}

0voto

Arwy Shelke Points 174
before removing it save those records in another ArrayList say BackupArrayList then Remove it as below
    if (recyclerList.size() > 4) {
        for (int i = 0; i < 4; i++) {
            BackUpArrayList.add(recyclerList.get(i));
            recyclerList.remove(i);
        }
        recyclerAdapter.notifyDataSetChanged();
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X