0
votes

RECYCLERVIEW'S SUIST SUPPORT TOUJOURS CLIQUEZ CLIQUEZ DES ÉVÉNEMENTS?

J'ai un recyclerview code> Affectant une liste d'éléments. Le député code> pour chaque lignée contient un bouton Supprimer pour supprimer la ligne. Si je supprimais la dernière ligne et que je vous appelle très vite sur la ligne de disparition, je peux planter mon application car le deuxième événement Tap est livré à la ligne supprimée. Je suis surpris que Android livre le deuxième événement. Avant d'essayer d'ajouter quelque chose comme Boolean Isdeletted Code> à mon Sous-classe CODE> Sous-classe, je me demande: Est-ce que je fais quelque chose d'autre mal à entrer dans cette situation?

class MyAdapter extends RecyclerView.Adapter<MyViewHolder> 
                implements ItemTouchHelperAdapter {

    List<Segment> segments;
    MyAdapter(List<Segment> objs) {
        this.segments = objs;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.segment_edit_row, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Segment seg = segments.get(position);
        holder.textView.setText(seg.getTitle());

        holder.dragHandle.setOnTouchListener((v, event) -> {
            if (MotionEventCompat.getActionMasked(event) ==
                    MotionEvent.ACTION_DOWN) {
                onStartDrag(holder);
            }
            return false;
        });
        holder.deleteButton.setOnClickListener(v -> {                
            segments.remove(position);
            notifyItemRemoved(position);
        });

        View.OnClickListener editExerciseListener = v -> {                
            Segment segment = segments.get(position);
            startEditSegmentActivity(segment, position);
        };

        holder.textView.setOnClickListener(editExerciseListener);
        holder.arrow.setOnClickListener(editExerciseListener);
    }


0 commentaires

4 Réponses :


2
votes

Vous devez recharger RecyclERView tout ce que vous effectuez une opération de suppression: Vous pouvez faire en ajoutant la ligne suivante:

yourAdapter.notifyDataSetChanged();


2 commentaires

Mon appel à NotiberItemRemoved ne le coupe pas? Je pensais que c'était une façon plus efficace de le dire exactement ce qui a changé, il ne fallait donc pas recharger l'ensemble des données.


Vérifiez ce lien: [ Stackoverflow. com / questions / 31367599 / ...



0
votes

Mettez à jour votre code comme: xxx


0 commentaires

0
votes

premier appel notifyItemremoved (position);

appelez ensuite segments.remove (position);


1 commentaires

Cela ne fonctionne pas. Je ne vois pas pourquoi ce serait, mais je viens de le tester quand même.



0
votes

J'ai rencontré une situation similaire il y a un moment. L'application s'est écrasée lorsque j'ai cliqué sur RECYCLERView Item tout en supprimant et était en cours d'animation de suppression (prend moins d'une seconde). La durée pour laquelle votre application est vulnérable à un crash potentiel est très faible dans cette situation.

Qu'est-ce que j'ai fait:

J'ai enregistré la valeur de la position (titulaire.getapterposition ()) lorsque l'application s'est écrasée. . Étonnamment, chaque fois que l'accident s'est produit, la valeur était -1. Finalement, j'ai écrit une version personnalisée de notifyItemRemoved. Ici, il est: xxx


0 commentaires