Set DataSource size in PageKeyedDataSource to get placeholder effect

Viewed 912

I am using the Paging Library from Android Architecture Component. I am trying to load data through server, without any local database.

My DataSource class extends PageKeyedDataSource.

Below is my Paging.Config customisation,

PagedList.Config pageConfig = (new PagedList.Config.Builder())
            .setPageSize(20)
            .setInitialLoadSizeHint(30)
            .setPrefetchDistance(5)
            .setEnablePlaceholders(true)
            .build();

I have enabled placeholders & that lands me to managing null in PagedListAdapter class. I have done that something like below,

@Override
public void onBindViewHolder(@NonNull MyEventViewHolder holder, int position) {
    Article mArticle = getItem(position);

    if (mArticle != null) {
        holder.txtTitle.setText(mArticle.getTitle());
        holder.txtAuthor.setText(mArticle.getAuthor());
        holder.txtDesc.setText(mArticle.getDescription());
    } else {
        holder.txtTitle.setText("...");
        holder.txtAuthor.setText("......");
        holder.txtDesc.setText(".........");
    }
}

I am unable to see placeholders at the end of a list before next API call.

My question is, Is there a way that I can specify the size of list after first API call? As my API is returning total number of items to be expected from the query. If not possible that what else I can do to see placeholders for my list.

Note : I cannot switch to ItemKeyedDataSource or PositionalDataSource because my API is set to respond on page basis.

1 Answers

For this I think you need to do loadInitial inside

callback.onResult(mArticles, 0, SIZE_OF_TOTAL_ITEMS, null, 2L);

loadBefore

callback.onResult(mArticles, params.key - 1);

loadAfter

callback.onResult(mArticles, params.key + 1);

And there is SIZE_OF_TOTAL_ITEMS must be known at initial load time.

Related