Адаптер не работает должным образом в Android

#android #android-studio #android-recyclerview #adapter

#Android #android-studio #android-recyclerview #адаптер

Вопрос:

Я извлекаю несколько изображений для нескольких проектов из firebase. Изображения успешно извлекаются из Firebase, но, отображая изображения, адаптер Recycler отображает изображения одного проекта в изображениях другого проекта и не отображает другие изображения проекта. Первоначально это происходит для первых двух проектов, но когда я непрерывно прокручиваю вверх и вниз, это происходит для разных проектов. Я думаю, может быть, это размер списка, который я использую для хранения изображений.

 private ArrayList<String> imagesList = new ArrayList<>();
 FirebaseRecyclerAdapter<projects, ProjectViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<projects, ProjectViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final ProjectViewHolder projectViewHolder, int i, @NonNull projects projects)
            {
                Log.d("counting", String.valueOf(i));
                imagesRef = getRef(i).child("projectImageUrl");
                final int count =0 ;
                imagesRef.addValueEventListener(new ValueEventListener()
                {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                    {
                        if(dataSnapshot.exists())
                        {

                            imagesList.clear();
                            //Loop which I am running 
                            for(DataSnapshot postSnap : dataSnapshot.getChildren())
                        {
                            String urls = postSnap.getValue().toString();
                            Log.d("NewImagesName", urls);
                            imagesList.add(urls);

                        }
                            //Recycler View
                            projectViewHolder.all_images.setLayoutManager(new GridLayoutManager(getApplicationContext(), 1));
                            ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(getApplicationContext(), R.dimen.item_offset);
                            projectViewHolder.all_images.addItemDecoration(itemDecoration);
                            layoutManager = new LinearLayoutManager(getApplicationContext()  , LinearLayoutManager.HORIZONTAL, false);
                            projectViewHolder.all_images.setHasFixedSize(true);
                            projectViewHolder.all_images.setLayoutManager(layoutManager);


                            ImagesListAdapter imagesListAdapter = new ImagesListAdapter(getApplicationContext()  , imagesList , listener);
                            projectViewHolder.all_images.setAdapter(imagesListAdapter);
}

 public static  class ProjectViewHolder extends RecyclerView.ViewHolder
    {
        RecyclerView all_images ;
        public ProjectViewHolder(@NonNull View itemView) {
        all_images =(RecyclerView)itemView.findViewById(R.id.imagesRecyclerView) ;
    }
  

Вот адаптер

 public class ImagesListAdapter extends RecyclerView.Adapter<ImagesListAdapter.ImageViewHolder>
{
    Context context;
    ArrayList<String> imagesList;

    IRecylerViewInterfaceListener clickListener ;

    public ImagesListAdapter(Context context , ArrayList<String> imagesList , IRecylerViewInterfaceListener clickListener)
    {
        this.context = context;
        this.imagesList = imagesList;
        this.clickListener =clickListener;
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {


        View  v = LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_item , parent ,false);
        return  new ImageViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position)
    {
        String newCurrentImage =  imagesList.get(position);
        Log.d("currentImage",newCurrentImage);
        ImageView imageView = holder.imageView;
        final ProgressBar progressBar = holder.progressBar;
        Glide.with(context.getApplicationContext()).load(newCurrentImage).listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource)
            {
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource)
            {
                progressBar.setVisibility(View.GONE);
                return false;
            }
        }).into(imageView);

    }

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

Вот что происходит на картинках
введите описание изображения здесь

Вот фактические фотографии введите описание изображения здесь

Комментарии:

1. Вам нужно написать свой собственный код для извлечения изображений и их отображения? Glide или Picasso делают это очень хорошо и сэкономят вам много времени и усилий.

2. Да, потому что у меня есть свой собственный взгляд, который я хочу показать