首页 > 解决方案 > 保存和取消保存功能

问题描述

我想在我的应用程序中实现保存和取消保存功能。我非常接近正确,但几乎没有问题。

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。

请问如何在不使用数据库中的网络调用来显示可绘制对象的情况下获取已保存项目的状态?

标签: javaandroidandroid-recyclerview

解决方案


  1. 从持有 recyclerview 的活动或片段中获取保存状态。

  2. 在请求中设置保存状态,例如

    upload.setSaved_status(saved_boolen);
    
  3. 在您的适配器 OnBindViewHolder 上,检查保存的状态

    boolean saved_status = uploadList.get(position).getSaved_status();
    
    if(saved_status){
      //display saved image here
    }
    else{
      //dispaly unsaved image here
    }
    
  4. 然后,您可以像以前一样为它们使用设置的 Onclick


推荐阅读