繁体   English   中英

为什么将RecyclerView适配器包装在另一个类中会导致不同的行为?

[英]Why does wrapping my RecyclerView adapter in another class cause different behaviour?

使用RecyclerViews时遇到一个问题。 基本上,在RecyclerView的初始加载期间(在我开始一项活动之后),项目出现之前会有一个小的延迟。

经过一段时间的试验,我发现了一种方法,可以通过将适配器包装在另一个类中来消除这种延迟,如下所示:

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

    private RecyclerView.Adapter<RecyclerView.ViewHolder> mAdapter;

    public AdapterWrapper(RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
        mAdapter = adapter;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return mAdapter.onCreateViewHolder(parent, viewType);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        mAdapter.onBindViewHolder(holder, position);
    }

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

    @Override
    public int getItemViewType(int position) {
        return mAdapter.getItemViewType(position);
    }
}

然后在我的活动中,我有这个:

protected void onCreate(Bundle savedInstanceState) {
    ...
    setUpRecyclerView();
    ...
}

public void setUpRecyclerView() {
    mAdapter = new MyAdapter(this, mCursor);
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    //mRecyclerView.setAdapter(mAdapter);                   // This causes a small delay.
    mRecyclerView.setAdapter(new AdapterWrapper(mAdapter)); // This doesn't
}

这对我来说真的很奇怪,我也不知道为什么行为不同。 有没有人有任何潜在的理论来解释这一点?

额外的信息:
-我正在使用游标加载器向适配器提供数据。
-我的适配器使用可在http://quanturium.github.io找到的CursorRecyclerAdapter进行子类化

您必须重写每个方法,而不仅仅是实现抽象方法。

当您在AdapterWrapper上调用重写的方法时,它将被传递给包装的对象。 其他所有方法都将传递给您的包装器,并且不会继续传递。

如果说得对,您的前提可能是鲱鱼。 这样的延迟可能是(通常是)延迟,因为您正在从后台线程执行ui的更新。

我们遇到了类似的问题,并最终跟踪到该情况。 将代码移回主线程,一切再次变得瞬间。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM