当前位置: 首页 > 知识库问答 >
问题:

BindViewHolder上的回收器视图

潘星阑
2023-03-14

我进行一个API调用,得到一个响应,并将其存储在ArrayList中。我有1个Textview和1个ImageView要填充。现在,当我得到响应时,它是根据JSON(即顺序)的,但当我尝试在适配器中设置它时,它是随机的(即没有顺序)

按顺序如下:

JSONArray imageArray = imageData.optJSONArray("images");
for (int i = 0; i < imageArray.length(); i++)
{
    JSONObject img = imageArray.optJSONObject(i);
    allID.add(i,img.optString("id"));
    allTitles.add(i,img.optString("title"));
    Log.d("Image ID: ", allID.get(i));
    Log.d("Image Title: ", allTitles.get(i));
    JSONArray imagePath = img.optJSONArray("display_sizes");
    for (int j = 0; j < imagePath.length(); j++)
    {
        JSONObject jb = imagePath.optJSONObject(j);
        allImagePath.add(j, jb.getString("uri"));
        Log.d("Image Path: ", allImagePath.get(j));

    }

    modelGettyImages.setID(allID);
    modelGettyImages.setTitle(allTitles);
    modelGettyImages.setImagePath(allImagePath);
    ImagesList.add(modelGettyImages);

}

现在,在这个适配器中,ImagePath不是按照以下顺序:

public class ImageCustomAdapter extends RecyclerView.Adapter<ImageCustomAdapter.ImagesViewHolder> {

    Context context;
    private ArrayList<ModelGettyImages> images;
    private ArrayList<ModelGettyImages> allImages = new ArrayList<>();

    public ImageCustomAdapter(ArrayList<ModelGettyImages> images,Context context) {
        this.images = images;
        this.context = context;
    }

    @Override
    public ImagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_row, parent, false);
        ImagesViewHolder imagesViewHolder = new ImagesViewHolder(view);


        return imagesViewHolder;
    }

    @Override
    public void onBindViewHolder(ImagesViewHolder holder, int position) {


        List<String> text = images.get(position).getTitle();
        Log.d("TitleAdapter : ",images.get(position).getTitle().toString());
        List<String> image = images.get(position).getImagePath();
        Log.d("ImageAdapter : ", images.get(position).getImagePath().toString());
        holder.title.setText(text.get(position));
        Picasso.with(context).load(image.get(position)).fit().centerCrop().into(holder.image);




    }

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

    public class ImagesViewHolder extends RecyclerView.ViewHolder{
        ImageView image;
        TextView title;
        public ImagesViewHolder(View itemView) {
            super(itemView);

             image = (ImageView)itemView.findViewById(R.id.imageView);
             title = (TextView)itemView.findViewById(R.id.textView);
        }
    }
}

共有1个答案

许安邦
2023-03-14

像下面这样解析你的反应,

JSONArray imageArray = imageData.optJSONArray("images");
for (int i = 0; i < imageArray.length(); i++)
{
    JSONObject img = imageArray.optJSONObject(i);

    Log.d("Image ID: ", img.optString("id"));
    Log.d("Image Title: ", img.optString("title"));

    JSONArray imagePath = img.optJSONArray("display_sizes");

    for (int j = 0; j < imagePath.length(); j++)
    {
        JSONObject jb = imagePath.optJSONObject(j);
        allImagePath.add(j, jb.getString("uri"));
        Log.d("Image Path: ", allImagePath.get(j));

    }

    modelGettyImages.setId(img.optString("id"));
    modelGettyImages.setTitle(img.optString("title"));
    modelGettyImages.setImagePaths(allImagePath);
    ImagesList.add(modelGettyImages);
}

准备你的模型类ModelGettyImages下面的变量和getters-setters.(我刚刚提到了模型类中的变量,你需要为这些变量自动生成getters-setters)

private String id, title;
private List<String> imagePaths;

更新onBindViewHolder方法如下,

@Override
public void onBindViewHolder(ImagesViewHolder holder, int position) {

    ModelGettyImages currentImage = images.get(position);

    Log.d("TitleAdapter : ",currentImage.getTitle();
    List<String> imagePaths = currentImage.getImagePaths();

    // Below is the list of images with multiple dimension. 
    // And we are using very first dimension image from that.
    Log.d("ImageAdapter : ", imagePaths.get(0).toString());

    holder.title.setText(currentImage.getTitle());
    Picasso.with(context).load(imagePaths.get(0)).fit().centerCrop().into(holder.image);
}
 类似资料:
  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我正试图在我的RecyclerView中实现搜索过滤器,就像在这篇文章中一样 我现在面临的主要问题是setOnQueryTextListener,在我的活动中:“在QueryTextListenerAdapter上找不到符号类”。这可能是我确实需要创造的东西,也可能是我没有在我的活动中实现的东西。它只是MainActivity扩展了AppCompatActivity。 我的 onCreateMen

  • 我正在使用Recycler视图显示元素列表。当我们单击每一行时,每一行上都有一个按钮,状态改变,背景颜色改变。状态更新后,我将调用notifyDataSetChanged(),但recyclerView不会刷新。

  • 主要活动: 适配器:

  • 我正在尝试在我的 上实现 ,但我没有得到任何结果。 我遵循了这个教程和这个技巧,但是没有人为我工作。 我已经实现了: 但它不让我编译,因为它们是不同的< code > viewmoder ,因为我创建了两个< code > viewmoder 类,但它们< code >扩展了Recycler。ViewHolder所以我不明白... 我正在尝试这样做,因为我有一个,我希望当列表为空时,它会显示一个,