【问题标题】:Android Picasso how delete cache with old elimiated imagesAndroid Picasso 如何使用旧的消除图像删除缓存
【发布时间】:2015-12-16 02:01:22
【问题描述】:

在我的应用程序中,我有一个 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 中加载了 Picasso 的图像,则应用打开画廊查看器。 当我使用 longpress 删除图像时出现问题。 内存中的文件被删除了,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;
}

我为代码中的一些意大利 cmets 道歉!

【问题讨论】:

    标签: android image listview picasso


    【解决方案1】:

    我认为 Picasso 指的是它在删除之前使用的缓存图像。

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

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

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

    【讨论】:

    • 这一行出现错误。 Cannot resolve method getContext()context 无效符号相同,有什么想法吗?谢谢
    • 如果您在适配器内使用此代码,请使用您从活动传递到适配器的上下文。如果内部活动使用。 Picasso.with(getApplicationContext (0r) filename.this)
    • 如果我使用Picasso.with(getApplicationContext()).invalidate(path); 无法解决方法无效。我在活动的OnLongClickListener 中使用它。什么是文件名.this?
    • 存在 OnLongClickListener 的 .java 文件名。例如:MainActivity.this.
    • Nothing...无法解析方法无效。我尝试image_to_zoom.invalidate(),但图像仍然没有。而 image_to_zoom 是 id 拍摄的图像的 ImageView
    猜你喜欢
    • 2023-03-13
    • 2016-06-25
    • 2014-10-20
    • 2022-12-09
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多