【问题标题】:executing async method in onBindViewHolder在 onBindViewHolder 中执行异步方法
【发布时间】:2019-01-19 09:05:06
【问题描述】:

我有一个recyclerViewrecyclerView 的哪些项目有一个textView,有时其中包含链接。我使用richLinkPreview 预览我的链接,其中每个项目都有一个链接。但是,当我滚动recyclerView 时,我遇到一个问题,即每次查看带有链接的项目时,它都会带来链接数据并显示它,有时它会显示错误的链接预览(在项目 B 中显示项目 A 的链接预览) .我认为我的问题是在onBindViewHolder 方法中调用richLinkPreview,但据我所知,我没有任何选择。你能帮我解决这个问题吗?

【问题讨论】:

  • 您可以在实际更新 UI 之前尝试检查每个 ViewHolder 的 id。在onBindViewHolder 中,您将获得positionViewHolder。您可以在更新 UI 之前检查该位置和viewHolder.getAdapterPosition() 是否相等。

标签: android android-asynctask android-recyclerview


【解决方案1】:

试试这个:

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

    private final SparseArray<MetaData> mFetchedMetadata = new SparseArray<>();

    ...

    @Override
    public void onBindViewHolder(final @NonNull Adapter.ViewHolder holder,
                                 final int position) {

        ...
        final MetaData metadata = mFetchedMetadata.get(position);
        if (metadata != null) {
            holder.richLinkView.setLinkFromMeta(metadata);
        } else {
            holder.richLinkView.setLink("url", new ViewListener() {
                @Override
                public void onSuccess(boolean status) {
                    mFetchedMetadata.put(position, holder.richLinkView.getMetaData());
                }

                @Override
                public void onError(Exception e) {
                }
            });
        }
        ...
    }

    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2017-05-14
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2014-04-02
    相关资源
    最近更新 更多