2015-07-09 2 views
0

Я столкнулся с проблемой при использовании RecyclerViews. В основном во время начальной загрузки 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 
} 

Этот кажется мне очень странным, и я понятия не имею, почему поведение отличается. Кто-нибудь получил какую-либо потенциальную теорию, чтобы объяснить это?

Дополнительная информация:
-Я использую курсор-загрузчик, чтобы предоставить данные моему адаптеру.
-Мой адаптер подклассы с помощью CursorRecyclerAdapter найденного на http://quanturium.github.io

ответ

2

Вы должны переопределить каждый метод, а не только реализовать абстрактные методы.

Когда вы вызываете свои методы overriden на AdapterWrapper, он переходит к обернутому объекту. Каждый другой метод подходит к вашей обертке и не проходит.

0

Если им правильно, ваше помещение может быть красной селедкой. Задержки, подобные этому, могут быть и обычно - потому что вы выполняете обновления ui из фонового потока.

У нас была аналогичная проблема и, наконец, отследил ее до того, что это был случай. Перемещение кода обратно в основной поток, все снова стало мгновенным.

Надеюсь, это поможет!

Смежные вопросы