2015-07-09 63 views
0

我在使用RecyclerView時遇到了一個問題。基本上在RecyclerView的初始加載期間(在我開始一個活動之後),在項目出現之前有一個小的延遲。爲什麼在另一個類中包裝我的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

回答

2

發現你必須重寫每一個方法,而不僅僅是實現抽象方法CursorRecyclerAdapter子類。

當您在AdapterWrapper上調用您的overriden方法時,它將傳遞給包裝對象。其他所有方法都將包裝到您的包裝中,而不是傳遞給您的包裝。

0

如果我的權利,你的前提可能是一個紅色的鯡魚。像這樣的延遲可以 - 通常是 - 因爲你正在從後臺線程執行對ui的更新。

我們有一個類似的問題,並最終追蹤到這種情況。將代碼移回主線程,一切都變成了即時。

希望這會有所幫助!

相關問題