繁体   English   中英

单击“收藏夹”按钮时停止recyclerview尝试更新

[英]Stop recyclerview from trying to update when “Favourite” button is clicked

我的 recyclerview 的每一行都有一个“收藏夹”按钮,用户在喜欢图像时单击该按钮(显然)。 每一行都是一个卡片视图,我只想在用户打开片段时“翻转”。

当用户单击按钮时,我用“Y”或“N”更新我的数据库。 我的问题是即使列表没有更改,我的 recyclerview 也会刷新。 当它刷新我所有的卡片时,我不想要的翻转。 单击按钮时如何阻止recyclerview更新?

这是我的适配器 class

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


        String image;

        if (flip) {
                holder.flipView.flipTheView();
            }
            ClothingItem current = mClothingItems.get(position);
            holder.itemNameView.setText(current.getItem());
            holder.categoryNameView.setText(current.getCategory());
            holder.seasonNameView.setText(current.getSeason());

            Integer yesCount = current.getYesCount();
            Integer noCount = current.getNoCount();


            if (current.getFavourite().equalsIgnoreCase("N")) {
                holder.animationView.setProgress(0);
            }
            else {
                holder.animationView.setProgress(1);
            }

            holder.yesTextView.setText(String.valueOf(yesCount));
            holder.noTextView.setText(String.valueOf(noCount));
            image = current.getPhotoPath();
            Glide.with(holder.cardView)
                    .load(image)
                    .into(holder.pictureView);

            flip = false;

        } catch (NullPointerException e) {
            Log.e("Picture","onBindViweHolder: Null Point:" + e.getMessage());
        }

        holder.animationView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                listener.onFavouriteClick(position);


            }
        });

 public interface clickButtons {

        void onFavouriteClick(int position);

    }

片段 Class

 @Override
    public void onFavouriteClick(int position) {

        RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
        LottieAnimationView animationView = holder.itemView.findViewById(R.id.favouriteAnimation);

        ClothingItem item = springList.get(position);
        final Long id = item.getId();

        if (animationView.getProgress() > 0) {

            animationView.setProgress(0);
            mClothingViewModel.updateFavourite(id.intValue(), "N");
            adapter.notifyItemChanged(position,"favourite");

       } else if (animationView.getProgress() == 0) {

            animationView.playAnimation();
         
            mClothingViewModel.updateFavourite(id.intValue(),"Y");

        }
    }

我尝试将 onBindViewHolder 与有效负载一起使用,但得到了相同的结果。 我想我没有正确调用这个

adapter.notifyItemChanged(position,"favourite");

适配器 class

    @Override
    public void onBindViewHolder(final ClothesViewHolder holder ,final int position, final List<Object> payloads){
        String image;

        if(!payloads.isEmpty()) {
            ClothingItem current = mClothingItems.get(position);
            holder.itemNameView.setText(current.getItem());
            holder.categoryNameView.setText(current.getCategory());
            holder.seasonNameView.setText(current.getSeason());

            Integer yesCount = current.getYesCount();
            Integer noCount = current.getNoCount();

            if(yesCount == null) {

                yesCount = 0;
            }
            if (noCount == null) {

                noCount = 0;
            }

            if (current.getFavourite() == null || current.getFavourite().equalsIgnoreCase("N")) {
                holder.animationView.setProgress(0);
            }
            else {
                holder.animationView.setProgress(1);
            }

//            Log.d("Counting","Yes count " + yesCount + " no count " + noCount);

            holder.yesTextView.setText(String.valueOf(yesCount));
            holder.noTextView.setText(String.valueOf(noCount));
            image = current.getPhotoPath();
            Glide.with(holder.cardView)
                    .load(image)
                    .into(holder.pictureView);

        } else {

            onBindViewHolder(holder,position);
        }
    }

分段

 @Override
    public void onFavouriteClick(int position) {

        RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
        LottieAnimationView animationView = holder.itemView.findViewById(R.id.favouriteAnimation);

        ClothingItem item = springList.get(position);
        final Long id = item.getId();

        if (animationView.getProgress() > 0) {

            animationView.setProgress(0);
            mClothingViewModel.updateFavourite(id.intValue(), "N");
            adapter.notifyItemChanged(position,"favourite");

       } else if (animationView.getProgress() == 0) {

            animationView.playAnimation();

            mClothingViewModel.updateFavourite(id.intValue(),"Y");
              
            adapter.notifyItemChanged(position,"favourite");
        }
    }

调用 notifydataSetChanged 时会更新或刷新 Recyclerview。 尝试在单击事件中删除 notifyDataSetChanged

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM