Set DataSource size in PageKeyedDataSource to get placeholder effect
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.



add a comment |
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.



add a comment |
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.



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.






asked Jan 2 at 10:06


buzzingsilentlybuzzingsilently
865516
865516
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54004388%2fset-datasource-size-in-pagekeyeddatasource-to-get-placeholder-effect%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
add a comment |
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.
add a comment |
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.
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.
answered Jan 2 at 12:42


Sameer JaniSameer Jani
696210
696210
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54004388%2fset-datasource-size-in-pagekeyeddatasource-to-get-placeholder-effect%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown