0

我有一个Custom ListView包含一些Views. 当我单击一个ImageView名为“deleteRow”的项目时,应将所选项目Database从我的ListView,和

我已成功从数据库中删除了该项目,但ListView没有刷新,这是我的getView()代码:

public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;
    if (convertView==null)
    {
        holder=new ViewHolder();
        convertView = inflater.inflate(R.layout.espaceclientuploadsource, null);
        holder.nomduProduit = (TextView)convertView.findViewById(R.id.UploadedProductName);
        holder.prixDuProduit = (TextView)convertView.findViewById(R.id.UplodedProductPrice);
        holder.imageDuProduit = (ImageView)convertView.findViewById(R.id.Uplodimage);
        holder.status = (ImageView)convertView.findViewById(R.id.UploadedStatus);
        holder.deleteRow=(ImageView)convertView.findViewById(R.id.ImageViewDeleteRow);
        convertView.setTag(holder);
    }

    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    Bitmap bitmapImage = BitmapFactory.decodeFile(path+File.separator+lesProduits.get(position).getImage());

    Drawable drawableImage = new BitmapDrawable(bitmapImage);
    holder.imageDuProduit.setImageDrawable(drawableImage);
    holder.nomduProduit.setText(lesProduits.get(position).getNomDuProduit());
    holder.prixDuProduit.setText(lesProduits.get(position).getPrixDuProduit());
    holder.deleteRow.setImageResource(R.drawable.deleteRow);


    holder.deleteRow.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
        Context ctx = v.getContext();
        produitSource=new ProductsDataSource(ctx);
        produitSource.open();
        produitSource.deleteUpload(lesProduits.get(position));          
        produitSource.close();

        }
    });


    switch (lesProduits.get(position).getStatus())
    {

    case 3://annonce Accepté
    holder.status.setImageResource(R.drawable.accepte); 
    break;

    case 2://annonce en Attente
    holder.status.setImageResource(R.drawable.enattente);   
    break;

    case 1://annonce refusé
    holder.status.setImageResource(R.drawable.refuse);
    break;

    case 0://produit vendu
    holder.status.setImageResource(R.drawable.vendu);
    break;
    }
    return convertView;
}

有什么建议么?

4

3 回答 3

1

notifyDataSetChanged()是 ListAdapter 上用于刷新 ListView 的函数。

文档中摘录 :

public void notifyDataSetChanged ()

通知附加的观察者底层数据已更改,任何反映数据集的视图都应自行刷新。

于 2013-05-22T16:25:57.607 回答
1

ContentProvider需要在数据库写入操作运行时通知数据集已更改,即:

@Override
public int delete(Uri uri, String where, String[] whereArgs) {
    //Some delete code
    getContext().getContentResolver().notifyChange(uri, null);
}

您还需要在插入和更新方法中调用 notifyChange。


此外,由于您的数据显然依赖于数据库。您应该使用 aCursorAdapter而不是 general ArrayAdapter。最好使用支持包中包含的那个。

一个例子CursorAdapter

public class MyCursorAdapter extends CursorAdapter {

    public MyCursorAdapter(Context context, Cursor c, boolean autoRequery) {
        super(context, c, autoRequery);
    }

    @Override
    public void bindView(View v, Context con, Cursor c) {
        //set the data on your view
    }

    @Override
    public View newView(Context con, Cursor c, ViewGroup vg) {
        //just create your view, no need to set the data, it will be called again in bindview
    }
}

现在,每当您的数据库更新时,ListView都会自动更新,并且您可以通过使用 CursorAdapter 来获得一些内存优化。

于 2013-05-22T16:33:27.007 回答
0

您应该刷新您的 listView 适配器。重新创建适配器并将其替换为旧适配器。希望这可以帮助。

于 2013-05-22T16:22:29.313 回答