适配器在android中工作不正常
我正在从firebase检索多个项目的多个图像。图片已从Firebase成功检索,但在显示图像时,回收器适配器会在另一个项目图像中显示一个项目的图像,而不会显示其他项目图像。它最初发生在前两个项目中,但当我不断地上下滚动时,它会发生在不同的项目中。我想可能是我用来存储图像的列表的大小适配器在android中工作不正常,android,android-studio,android-recyclerview,adapter,Android,Android Studio,Android Recyclerview,Adapter,我正在从firebase检索多个项目的多个图像。图片已从Firebase成功检索,但在显示图像时,回收器适配器会在另一个项目图像中显示一个项目的图像,而不会显示其他项目图像。它最初发生在前两个项目中,但当我不断地上下滚动时,它会发生在不同的项目中。我想可能是我用来存储图像的列表的大小 private ArrayList<String> imagesList = new ArrayList<>(); FirebaseRecyclerAdapter<projects,
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或毕加索做得很好,将为您节省大量时间和精力。是的,因为我有自己的观点,我想展示