繁体   English   中英

Android Picasso如何删除带有旧消除图像的缓存

[英]Android Picasso how delete cache with old elimiated images

在我的应用程序中,我具有一个ListView来管理用户的输入。 用户可以输入文本图像 我有两个与ListView交互的侦听器:

LongClickListener

listView.setAdapter(adapter);

//LongClickListener for delete row in listview and row in a mysqlite
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        // TODO Auto-generated method stub
        ImageView image_to_zoom = (ImageView) view.findViewById(R.id.compiti_imageView);

        if (image_to_zoom.getDrawable() != null) {
            //Image IN
            //Path dell'immagine da cancellare eliminando inizio file:
            String path = image_to_zoom.getTag().toString().substring(5);

            File file = new File(path);
            boolean deleted = file.delete();

            if(deleted) {
                db.deleteSelectedEvento_image(activity_name, path);
                Toast.makeText(getApplicationContext(), "Foto eliminata!", Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(getApplicationContext(), "Errore eliminazione foto", Toast.LENGTH_LONG).show();
            }
        } else {

            //Imane none, cancello il record con il testo
            //Reperisco il testo toccato e lo elimino
            TextView compito = (TextView)view.findViewById(R.id.compiti_text);
            String text_compito = compito.getText().toString();

            db.deleteSelectedEvento_text(activity_name, text_compito);
            Toast.makeText(getApplicationContext(), "Testo eliminato!" , Toast.LENGTH_LONG).show();
        }

        //Lista con il nuovo elemento
        List<Compiti> newcompito = db.CompitiPerData(activity_name);

        if(newcompito != null) {
            //Aggiorno la Listview dell'activity con il nuovo inserimento
            compiti.clear();
            compiti.addAll(newcompito);
            adapter.notifyDataSetChanged();
        }

        return true;
    }
});

处理ListView中项目的取消。 和普通的ClickListener

// ListView Item Click Listener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        ImageView image_to_zoom = (ImageView) view.findViewById(R.id.compiti_imageView);

        if (image_to_zoom.getDrawable() != null) {

            //Image IN
            String path = image_to_zoom.getTag().toString();
            openImageReader(path);

        } else {
            //Imane none
            Toast.makeText(getApplicationContext(), "Nessuna foto da visualizzare!" , Toast.LENGTH_LONG).show();

        }
    }
});

如果该行在ImageView中加载了毕加索的图像,则该应用将打开图库查看器。 长按删除图像时出现问题。 内存中的文件也被删除,也记录在SQLite中,但是由于存储图像的缓存,图像的缩略图仍保留在ListView中 我需要类似的东西

Picasso.with(getApplicationContext()).invalidate(image_path);

但是我的毕加索版本是2.5.2,invalidate方法不存在。

如果删除了图像文件,为什么在列表视图中有缩略图?

这是将图像加载到ImageView中的适配器

@Override
public View getView(int position, View convertView, ViewGroup parent){
    LayoutInflater inflater = (LayoutInflater) getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.evento_list_view_line, null);

    //TODO gestire le immagini delle foto
    ImageView img = (ImageView)convertView.findViewById(R.id.compiti_imageView);
    TextView compito = (TextView)convertView.findViewById(R.id.compiti_text);

    Compiti m = getItem(position);

    if(m.getTestoCompito() != null){

        compito.setText(m.getTestoCompito());
        //Invisibile e non presente nel layout
        img.setVisibility(View.GONE);

    } else if (m.getPathFoto() != null){
        //Carico la foto nell'imageView
        Picasso.with(getContext())
                .load(m.getPathFoto())
                .resize(200, 200)
                .centerCrop()
                .into(img);
        //Setto un tag all'imageView per ritrovarla nella funzione di zoom
        img.setTag(m.getPathFoto());
    }
    return convertView;
}

对于代码中的一些意大利语注释,我深表歉意!

我认为毕加索在删除之前是指以前使用的缓存图像。

尝试清除特定图像的毕加索缓存。

最新的毕加索版本不支持invalidate()方法。

Picasso.with(context).invalidate(imagePath);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM