在我的应用中,我有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并且无效方法不存在。
如果我删除了图像文件,为什么列表视图中有缩略图?
这是在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;
}
我为代码中的一些意大利语评论道歉!
答案 0 :(得分:0)
我认为毕加索在删除之前是指之前使用的缓存图像。
尝试清除特定图像的毕加索缓存。
最近的毕加索版本不支持invalidate()方法。
Picasso.with(上下文).invalidate(的ImagePath);