Java 如何从FirestorePagingAdapter中的方法onLoadingStateChanged隐藏/显示进度条?
在我的应用程序中,有一个带有FirestorePagingAdapter的recyclerview。在适配器中,有方法onLoadingStateChanged谁负责加载状态。我想在加载下一页时显示进度条,并在加载时将其隐藏,这意味着当案例加载\u INITIAL-显示进度条时。 下面的代码将进一步解释:Java 如何从FirestorePagingAdapter中的方法onLoadingStateChanged隐藏/显示进度条?,java,android,android-recyclerview,google-cloud-firestore,firebaseui,Java,Android,Android Recyclerview,Google Cloud Firestore,Firebaseui,在我的应用程序中,有一个带有FirestorePagingAdapter的recyclerview。在适配器中,有方法onLoadingStateChanged谁负责加载状态。我想在加载下一页时显示进度条,并在加载时将其隐藏,这意味着当案例加载\u INITIAL-显示进度条时。 下面的代码将进一步解释: public class AdAdapter extends FirestorePagingAdapter<Ad, AdAdapter.AdHolder> { privat
public class AdAdapter extends FirestorePagingAdapter<Ad, AdAdapter.AdHolder> {
private Context mContext;
private ArrayList<String> imageUrls;
private ProgressBar homeRecyclerViewProgressBar;
public AdAdapter(Context context, @NonNull FirestorePagingOptions<Ad> options) {
super(options);
this.mContext = context;
}
@NonNull
@Override
public AdAdapter.AdHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ad_item, viewGroup, false);
AdHolder vh = new AdHolder(v);
mContext = viewGroup.getContext();
return vh;
}
@Override
protected void onBindViewHolder(@NonNull AdHolder holder, int position, @NonNull Ad model) {
holder.textViewTitle.setText(model.getTitle());
holder.textViewPrice.setText(String.valueOf(model.getPrice()));
imageUrls = model.getImagesUrls();
Glide.with(mContext)
.load(imageUrls.get(0))
.into(holder.imageView);
}
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
super.onLoadingStateChanged(state);
switch (state) {
case LOADING_INITIAL:
homeRecyclerViewProgressBar.setVisibility(View.VISIBLE);
// The initial load has begun
// ...
Log.d("someLog", "The initial load has begun");
return;
case LOADING_MORE:
// The adapter has started to load an additional page
// ...
Log.d("someLog", "The additional load has begun");
return;
case LOADED:
homeRecyclerViewProgressBar.setVisibility(View.GONE);
// The previous load (either initial or additional) completed
// ...
Log.d("someLog", "Has loaded");
return;
case ERROR:
// The previous load (either initial or additional) failed. Call
// the retry() method in order to retry the load operation.
// ...
Log.d("someLog", "Failed to load");
}
}
class AdHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
TextView textViewPrice;
ImageView imageView;
public AdHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.adTitleMain);
textViewPrice = itemView.findViewById(R.id.adPriceMain);
imageView = itemView.findViewById(R.id.imageView);
homeRecyclerViewProgressBar = itemView.findViewById(R.id.home_recycler_view_progressbar);
}
}
}
要显示/隐藏您的
HomeRecycleServiceWProgressBar
,请在onLoadingStateChanged()
方法中使用以下代码行:
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
homeRecyclerViewProgressBar.setVisibility(View.VISIBLE);
break;
case LOADING_MORE:
case LOADED:
homeRecyclerViewProgressBar.setVisibility(View.GONE);
break;
case FINISHED:
homeRecyclerViewProgressBar.setVisibility(View.GONE);
break;
case ERROR:
retry();
break;
}
}
你好,Alex mamo非常感谢你,mutch,顺便说一句,我在youtube上看了你的视频)。您的解决方案对我很有帮助,但相对而言,我会解释:当适配器单独存在于文件中时,它不起作用,但当我将适配器放入片段中的函数中时,它对我起作用。您好,欢迎:)很高兴听到它很有帮助,感谢您观看我的教程。
@Override
protected void onLoadingStateChanged(@NonNull LoadingState state) {
switch (state) {
case LOADING_INITIAL:
homeRecyclerViewProgressBar.setVisibility(View.VISIBLE);
break;
case LOADING_MORE:
case LOADED:
homeRecyclerViewProgressBar.setVisibility(View.GONE);
break;
case FINISHED:
homeRecyclerViewProgressBar.setVisibility(View.GONE);
break;
case ERROR:
retry();
break;
}
}