[英]showing a progress bar with android paging library
我正在使用分頁庫和房間,使我的房間數據庫成為我的應用程序的單層真相。 當使用改造從服務器完成獲取時,我將結果本地保存在數據庫中,然后我使用分頁庫從數據庫中獲取數據。 我正在使用BoundaryCallback 。
@Override
public void onZeroItemsLoaded() {
requestAndSaveData();
}
@Override
public void onItemAtEndLoaded(@NonNull Photo itemAtEnd) {
requestAndSaveData();
}
private void requestAndSaveData() {
if (isRequestInProgress) return;
isRequestInProgress = true;
apiInterface.getPhotos(lastRequestPage, NETWORK_PAGE_SIZE).enqueue(new Callback<PhotoList>() {
@Override
public void onResponse(Call<PhotoList> call, Response<PhotoList> response) {
if (response.isSuccessful()) {
cache.insertPhotos(response.body().getHits()); //todo only save 20 - 40 items
lastRequestPage++;
isRequestInProgress = false;
Log.i("deb", "number from boundary: " + response.body().getHits().size());
}
}
當數據庫中沒有項目或用戶滾動到最后一個項目時,我調用requestAndSaveData()
方法從服務器獲取數據並將其保存到數據庫中。
我的問題是如何在從服務器加載下一頁並將其保存到數據庫時在列表底部顯示進度條,因為這可能需要很長時間?
首先,您可以通過詢問如何在RecyclerView
底部顯示加載指示器而不是將其縮小到分頁庫來擴大您的問題范圍。
其次,您可以通過在列表中添加一個僅用於顯示負載指示器的額外單元格,輕松地在列表底部顯示加載指示器,這里使用類似的想法來顯示網絡狀態:
將ProgressBar
組件放在布局 xml 中。 然后根據 api 調用更改其可見性。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
style="@style/recyclerViewDefaultStyle" />
<ProgressBar
android:id="@+id/pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="gone" />
</LinearLayout>
在您的活動中
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;
import in.ks.widgetClock.R;
/**
* Created by KHEMRAJ on 6/23/2018.
*/
public class Sample extends AppCompatActivity {
ProgressBar progressBar;
private void showProgressBar() {
progressBar.setVisibility(View.VISIBLE);
}
private void hideProgressBar() {
progressBar.setVisibility(View.GONE);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
progressBar = findViewById(R.id.pb);
...
}
private void requestAndSaveData() {
if (isRequestInProgress) return;
isRequestInProgress = true;
showProgressBar();
apiInterface.getPhotos(lastRequestPage, NETWORK_PAGE_SIZE).
enqueue(new Callback<PhotoList>() {
@Override
public void onResponse(Call<PhotoList> call, Response<PhotoList> response) {
hideProgressBar();
if (response.isSuccessful()) {
cache.insertPhotos(response.body().getHits()); //todo only save 20 - 40 items
lastRequestPage++;
isRequestInProgress = false;
Log.i("deb", "number from boundary: " + response.body().getHits().size());
}
}
}
}
}
在您的 UI 中提供占位符:
如果您使用占位符,我不知道這有什么需要,它也有優勢,見下文:
無需加載微調器:由於列表大小已知,因此無需提醒用戶正在加載更多項目。 占位符本身傳達了該信息。
來源: https : //developer.android.com/topic/libraries/architecture/paging/ui
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.