#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. Да, потому что у меня есть свой собственный взгляд, который я хочу показать