簡體   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