适配器在android中工作不正常

适配器在android中工作不正常,android,android-studio,android-recyclerview,adapter,Android,Android Studio,Android Recyclerview,Adapter,我正在从firebase检索多个项目的多个图像。图片已从Firebase成功检索,但在显示图像时,回收器适配器会在另一个项目图像中显示一个项目的图像,而不会显示其他项目图像。它最初发生在前两个项目中,但当我不断地上下滚动时,它会发生在不同的项目中。我想可能是我用来存储图像的列表的大小 private ArrayList<String> imagesList = new ArrayList<>(); FirebaseRecyclerAdapter<projects,

我正在从firebase检索多个项目的多个图像。图片已从Firebase成功检索,但在显示图像时,回收器适配器会在另一个项目图像中显示一个项目的图像,而不会显示其他项目图像。它最初发生在前两个项目中,但当我不断地上下滚动时,它会发生在不同的项目中。我想可能是我用来存储图像的列表的大小

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) ;
    }
private ArrayList imagesList=new ArrayList();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(@NonNull final ProjectViewHolder ProjectViewHolder,int i,@NonNull projects)
{
Log.d(“计数”,String.valueOf(i));
imagesRef=getRef(i).child(“projectmageurl”);
最终整数计数=0;
imagesRef.addValueEventListener(新的ValueEventListener()
{
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot)
{
if(dataSnapshot.exists())
{
imagesList.clear();
//我正在运行的循环
对于(DataSnapshot postSnap:DataSnapshot.getChildren())
{
字符串URL=postSnap.getValue().toString();
Log.d(“NewImagesName”,URL);
添加(URL);
}
//回收者视图
projectViewHolder.all_images.setLayoutManager(新的GridLayoutManager(getApplicationContext(),1));
ItemOffsetDecoration itemDecoration=新的ItemOffsetDecoration(getApplicationContext(),R.dimen.item_offset);
projectViewHolder.所有图片.附加装饰(itemDecoration);
layoutManager=new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL,false);
projectViewHolder.all_images.setHasFixedSize(true);
projectViewHolder.all_images.setLayoutManager(layoutManager);
ImagesListAdapter ImagesListAdapter=新的ImagesListAdapter(getApplicationContext(),imagesList,listener);
projectViewHolder.all_images.setAdapter(imagesListAdapter);
}
公共静态类ProjectViewHolder扩展了RecyclerView.ViewHolder
{
回收查看所有图片;
公共项目视图持有者(@NonNull View itemView){
所有图片=(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();
    }
公共类ImagesListAdapter扩展了RecyclerView.Adapter
{
语境;
ArrayList图像列表;
iRecylervieInterfaceListener单击Listener;
公共ImagesListAdapter(上下文上下文、ArrayList imagesList、iRecyServiceInterfaceListener clickListener)
{
this.context=上下文;
this.imagesList=imagesList;
this.clickListener=clickListener;
}
@RequiresApi(api=Build.VERSION\u code.LOLLIPOP)
@非空
@凌驾
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType)
{
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.gallery_项,parent,false);
返回新的ImageViewHolder(v);
}
@凌驾
public void onBindViewHolder(@NonNull ImageViewHolder,int位置)
{
字符串newCurrentImage=imagesList.get(位置);
Log.d(“currentImage”,newCurrentImage);
ImageView ImageView=holder.ImageView;
最终ProgressBar ProgressBar=holder.ProgressBar;
Glide.with(context.getApplicationContext()).load(newCurrentImage).listener(newRequestListener()){
@凌驾
公共布尔onException(异常e、字符串模型、目标、布尔isFirstResource)
{
返回false;
}
@凌驾
公共布尔值onResourceReady(GlideDrawable资源、字符串模型、目标、布尔值isFromMemoryCache、布尔值isFirstResource)
{
progressBar.setVisibility(View.GONE);
返回false;
}
}).进入(图像视图);
}
@凌驾
public int getItemCount()
{
返回imagesList.size();
}
下面是图片中发生的事情

这是真实的照片

您需要编写自己的代码来获取图像并显示它们吗?Glide或毕加索做得很好,将为您节省大量时间和精力。是的,因为我有自己的观点,我想展示