【发布时间】: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