gpt4 book ai didi

android - 在 RecyclerView 中第二次滚动后项目的值不同

转载 作者:行者123 更新时间:2023-11-30 01:36:20 27 4
gpt4 key购买 nike

我在下方列出了具有主图片和四张缩略图的项目,为了获取它们,我首先调用 parsequery,然后将它们与 url 一起显示。当我第一次滚动时,一切看起来都不错,但在第一次滚动后,如果我在任何项目中只有两个缩略图,则连续的缩略图 3 和 4 将显示第一个项目的缩略图。这是代码,我稍微简化了一下

    public void onBindViewHolder(final VersionViewHolder versionViewHolder, final int i) {

final Post itPost = items.get(i);

versionViewHolder.itemView.setTag(itPost);

ParseQuery<ParseObject> query = ParseQuery.getQuery("Images");
query.whereEqualTo("postid", itPost.getIdPost());
query.orderByDescending("createdAt");
query.findInBackground(new FindCallback<ParseObject> () {
@Override
public void done(final List<ParseObject> objects, ParseException e) {
if(e == null) {

for(int o = 0; o < objects.size(); o++) {

if(o == 0) {
ImageUtil.displayImage(versionViewHolder.mainImg, objects.get(o).getString("url"), null);
} else if(o == 1) {
ImageUtil.displayImage(versionViewHolder.imgThumb, objects.get(o).getString("url"), null);
} else if(o == 2) {
ImageUtil.displayImage(versionViewHolder.imgThumb2, objects.get(o).getString("url"), null);
} else if(o == 3) {
ImageUtil.displayImage(versionViewHolder.imgThumb3, objects.get(o).getString("url"), null);
} else if(o == 4) {

ImageUtil.displayImage(versionViewHolder.imgThumb4, objects.get(o).getString("url"), null);

versionViewHolder.imgThumb4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//alertGallery(,versionViewHolder.itemView);
}

});
} else if(o <= 5) {

String num = "" + o;
versionViewHolder.txtContadorImagenes.setText("+ ");

//TODO
}

}

}

}
});

最佳答案

问题来自于每次调用 onBindViewHolder() 方法并使用 for 循环时运行 Parse 查询。

您还可以简化正在使用的 Parse 表。我假设您想要每个项目、1 个主图像和 4 个缩略图。因此,代表 1 个项目的每个 ParseObject 都应该包含主图像和 4 个缩略图的 url。你不应该为每个 url 创建一个 ParseObject。 1 ParseObject = RecyclerView 中的 1 个项目 :)

  1. 在 Parse 中,将 url 重命名为 urlMain 并为四个缩略图创建列 urlThumb1urlThumb2urlThumb3urlThumb4 数据类型为字符串。
  2. 将您的查询移到 onBindViewHolder() 方法之外,例如移动到您 Activity 的 onCreate() 方法。
  3. 在 Parse 查询的 done() 回调中,将查询结果列表 objects 传递给您的适配器,并在您的 RecyclerView 上设置适配器。
  4. onBindViewHolder() 中删除 for 循环并根据所选的 ParseObject 使用 displayImage,该对象由(适配器数据集中的项目)的位置决定。

代码看起来像:

  • 在您的 Activity 和 onCreate() 中:

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // execute the parseQuery
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Images");
    query.whereEqualTo("postid", itPost.getIdPost());
    query.orderByDescending("createdAt");
    query.findInBackground(new FindCallback<ParseObject> () {
    @Override
    public void done(final List<ParseObject> objects, ParseException e) {
    if(e == null) {
    // if no ParseException, pass the objects list to the adapter
    YourAdapter yourAdapter = new YourAdapter(objects);
    // set the adapter
    yourRecyclerView.setAdapter(yourAdapter);
    }
    }
    }

    ...

    }
    }
  • 在你的适配器中

    public class YourAdapter extends RecyclerView.Adapter<YourViewHolder> {
    private List<ParseObject> list;

    public YourAdapter(List<ParseObject> objects) {
    list = objects;
    }

    ...

    // in the onBindViewHolder method, set the image based on the position
    @Override
    public void onBindViewHolder(YourViewHolder holder, int position) {
    ParseObject currentObj = list.get(position);

    ImageUtil.displayImage(holder.mainImg, currentObj.getString("urlMain"), null);
    ImageUtil.displayImage(holder.imgThumb, currentObj.getString("urlThumb1"), null);
    ImageUtil.displayImage(holder.imgThumb2, currentObj.getString("urlThumb2"), null);
    ImageUtil.displayImage(holder.imgThumb3, currentObj.getString("urlThumb3"), null);
    ImageUtil.displayImage(holder.imgThumb4, currentObj.getString("urlThumb4"), null);

    holder.imgThumb4.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //alertGallery(,versionViewHolder.itemView);
    }
    }
    }

希望这对您有所帮助,如果这不是您想要的或有任何疑问,请在下方评论!

关于android - 在 RecyclerView 中第二次滚动后项目的值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35066710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com