在onBindViewHolder中执行异步方法

时间:2018-08-12 12:07:13

标签: android android-recyclerview android-asynctask recycler-adapter

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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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) {
                }
            });
        }
        ...
    }

    ...
}