java - 让用户等待活动完成加载
问题描述
大家,我正在做一个从firestore检索数据的项目,其中一些包含图像的URL。当我启动应用程序时,我注意到加载图像时出现延迟。所以我想到了我在 Facebook 应用程序中看到的情况,即在加载显示带有一些动画的视图的图像时,以通知用户应用程序仍在后台加载,请提供任何帮助。
这就是我检索数据的方式
PostsAdapter=new FirestoreRecyclerAdapter<docs,PostsViewHolder>(allPosts) {
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=
LayoutInflater.from(parent.getContext()).inflate(R.layout.single_post,parent,false);
return new PostsViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull final PostsViewHolder holder, int position, @NonNull final docs model) {
holder.postTitle.setText(model.getTitle());
holder.postImage.setText(model.getPostimage());
holder.image_1.setText(model.getImage_1());
holder.image_2.setText(model.getImage_2());
holder.content_1.setText(model.getContent_1());
holder.content_2.setText(model.getContent_2());
holder.Date.setText(model.getDate());
holder.postId.setAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.item_animation_fall_down));
holder.singlePostCard.setAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.slide_right));
holder.titleLayout.setAnimation(AnimationUtils.loadAnimation(getContext(),R.anim.slide_up));
Glide.with(requireContext())
.load(model.getPostimage())
.error(R.drawable.error_uom)
.placeholder(R.drawable.ic_account)
.into(holder.spImage);
holder.itemView.playSoundEffect(SoundEffectConstants.CLICK);
holder.itemView.setOnClickListener(v -> {
Intent intent = new Intent(v.getContext(), full_content.class);
vu=v;
holder.itemView.playSoundEffect(0);
intent.putExtra("postImage",model.getPostimage());
intent.putExtra("postTitle",model.getTitle());
intent.putExtra("content_1",model.getContent_1());
intent.putExtra("content_2",model.getContent_2());
intent.putExtra("image_1",model.getImage_1());
intent.putExtra("image_2",model.getImage_2());
intent.putExtra("date",model.getDate());
v.getContext().startActivity(intent);
});
}
};
解决方案
您可以在“single_post.xml”文件中添加“ProgressBar”小部件,然后在您的 ViewHolder 类(PostViewHolder)上进行引用,最后一步是在“onBindViewHolder”方法中更改 Glide 代码。
single_post.xml
<ProgressBar
android:id="@+id/imageProgressBar"
android:layout_width="match_parent"
android:layout_height="100dp"
android:visibility="visible" />
PostViewHolder
ProgressBar imgProgressBar = (ProgressBar) findViewById(R.id.imageProgressBar);
OnBindViewHolder 方法
Glide.with(requireContext())
.load(model.getPostimage())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
holder.imgProgressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
holder.imgProgressBar.setVisibility(View.GONE);
return false;
}
})
.error(R.drawable.error_uom)
.placeholder(R.drawable.ic_account)
推荐阅读
- vue.js - VueJS - 托管在子目录中 - 工作示例?
- java - JList 上不出现滚动条
- python - 很难启动 Rabbitmq 服务器,想知道为什么不断收到此错误 init:do_boot/3 line 817
- batch-file - 如果文件在扩展名为 .log 的文件夹中,我如何计算数量并将计数存储在可以作为数组索引传递的变量中?
- c# - 计算字符串中特殊字符的出现次数
- javascript - 为什么对象不正确?
- azure - Azure Build Pipeline:VSBuild 在 CodeDom 提供程序上失败
- vb.net - 是否有通过 vb.net 中的循环更改布尔变量的选项
- flutter - Flutter中如何在Appbar下添加Textfield
- jquery - jQuery 如何在选择器中使用数值变量