[英]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.