如何使进度条在recovererview中不可见。

问题描述 投票:0回答:2

有一个通过RecyclerView制作的图片列表。当您在图片被转移到下一个活动时点击图片,应该会显示一个进度条。当有返回图片选择的活动时,ProgressBar也仍然可见,尽管它必须被隐藏。

正如我在下面所做的那样,只有在第一张图片中进度条才会变得不可见,但在其他图片中它却不起作用。我不明白为什么

在我的项目中,有这样的类

接口

public interface ImageOnC {
    void onClick(int position);
}

ImageViewHolder

   public class ImageViewHolder extends RecyclerView.ViewHolder {

        public ImageView imageView;
        private ImageOnC imageOnC;
        public ImageButton imageButton;
        public ProgressBar progressBar;

        public void setImageOnC(ImageOnC imageOnC) {
            this.imageOnC = imageOnC;
        }

        public ImageViewHolder(@NonNull final View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image_outline);
            progressBar = itemView.findViewById(R.id.progr);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    imageOnC.onClick(getAdapterPosition());
                    progressBar.setVisibility(View.VISIBLE);
                }
            });
        }
    }

图片Adabter

public class ImageAdabter extends RecyclerView.Adapter<ImageViewHolder> {

    private Context mContext;
    private List<Integer> listImages;

    public ImageAdabter(Context mContext){
        this.mContext = mContext;
        this.listImages = getImages();

    }

    private List<Integer> getImages() {
        List<Integer> results = new ArrayList<>();

        results.add(R.drawable.outline1);
        results.add(R.drawable.outline2);
        results.add(R.drawable.outline3);
        results.add(R.drawable.outline4);
        results.add(R.drawable.outline5);
        results.add(R.drawable.outline6);
        results.add(R.drawable.outline7);
        results.add(R.drawable.outline8);
        results.add(R.drawable.outline9);
        results.add(R.drawable.outline10);

        return  results;
    }

    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_images,parent,false);
        return new ImageViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ImageViewHolder holder, final int position) {
        holder.imageView.setImageResource( listImages.get(position));
        holder.setImageOnC(new ImageOnC() {

            @Override
            public void onClick(int position) {
                Common.PICTURE_SELECTED = listImages.get(position);
                mContext.startActivity(new Intent(mContext, Colorful.class));
            }
        });


    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position, List<Object>payload){
    //if so, then the progress bar only works for the first image in recyclerview
        if(!payload.isEmpty()){
            if(payload.get(position) instanceof Integer)
                holder.progressBar.setVisibility(View.GONE);
            }
        else super.onBindViewHolder(holder, position, payload);
    }

    @Override
    public int getItemCount() {
        return listImages.size();
    }
}

我把这个加到活动中

private void initView() {
        recyclerView = findViewById(R.id.recycle_view_images);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adabter = new ImageAdabter(this);
        recyclerView.setAdapter(adabter);
    }
      @Override
        public void onResume() {
          super.onResume();
          if (adabter != null) {
              adabter.notifyItemChanged(position, position);
          }
      }
java android progress-bar
2个回答
0
投票

在xml文件中使用进度条的可见性消失

© www.soinside.com 2019 - 2024. All rights reserved.