java - 保存和取消保存功能
问题描述
我想在我的应用程序中实现保存和取消保存功能。我非常接近正确,但几乎没有问题。
1st - 我已经能够在点击监听器上实现保存和取消保存项目。使用这个
boolean saved_status = uploadList.get(position).getSaved_status();
holder.save_image_section.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(saved_status){
Glide.with(context).load(R.drawable.ic_bookmark_unfilled_24dp).dontTransform().into(holder.save_icon);
uploadList.get(position).setSaved_status(false);
notifyItemChanged(position);
unSaveImage(position, holder);
}
else {
Glide.with(context).load(R.drawable.ic_bookmark_filled_24dp).dontTransform().into(holder.save_icon);
uploadList.get(position).setSaved_status(true);
notifyItemChanged(position);
saveImage(position, holder);
}
}
});
这按预期工作......当用户单击保存时,可绘制更改,并且图像成功保存在数据库中。与未保存相同。
问题
当用户退出应用程序时......已保存/未保存项目的状态未存储
我知道我必须检查来自 db 进行网络调用的项目的状态,以获得正确的可绘制对象来显示......
我这样做了,但是在显示可绘制对象时会出现延迟,尤其是在导致不良用户体验的不良网络中,并且由于网络调用等原因,保存的图像需要几秒钟才能更改可绘制对象,这会使点击侦听器变得混乱。
我有一个存储保存的图像 ID 和保存图像的用户的数据库。
我再次尝试了这个 - 使用 volley 我做了这个并在我的适配器中调用了 onBindViewHolder 中的方法
int i;
for (i = 0; i < response.length(); i++) {
try {
JSONObject jsonObject = new JSONObject(response);
String success = jsonObject.getString("success");
//if the current image has been saved by the current logged in user
if(success.equals("1")){
//I could set drawable here but there is a delay in displaying drawable
uploadList.get(position).setSaved_status(true);
}
else {
uploadList.get(position).setSaved_status(false);
}
}
它不起作用,因为即使在设置后它也会为保存状态返回 false。
请问如何在不使用数据库中的网络调用来显示可绘制对象的情况下获取已保存项目的状态?
解决方案
从持有 recyclerview 的活动或片段中获取保存状态。
在请求中设置保存状态,例如
upload.setSaved_status(saved_boolen);
在您的适配器 OnBindViewHolder 上,检查保存的状态
boolean saved_status = uploadList.get(position).getSaved_status(); if(saved_status){ //display saved image here } else{ //dispaly unsaved image here }
然后,您可以像以前一样为它们使用设置的 Onclick
推荐阅读
- conv-neural-network - 卷积层可以学习计算输入数据的标准差吗?
- html - 为什么此代码不会显示在 wordpress 页面上?
- .net - 在提出请求时计算价格时如何按价格对数百种产品进行排序
- mongodb - 如何通过存储库查询环回 4 中的特定字段?
- c# - c# 正则表达式澄清
- java - 用于匹配不同大小向量中的最后一个数字的正则表达式
- java - -1个月+1天的时间操作与开始仍有1个月的差异
- java - 在构造函数中设置变量数组的最小大小
- laravel - 使用多个 Docker 容器时无法清除 Laravel 缓存
- r - 如何重建网络以使其保持相同的属性和相同的形状,但节点位于不同的位置?