2

我在 android 中使用 SQLiteDatabase。删除一行后,我无法引用我的列表视图。我的代码如下:

    public void delete(String i) {
    // TODO Auto-generated method stub
    String [] columns= new String[]{KEY_ROW_ID,KEY_FHR,KEY_ID,KEY_NAME,KEY_AGE};
    Cursor c= our_db.query(KEY_TABLE, columns, null, null,null, null, null);
    our_db.delete(KEY_TABLE, KEY_NAME+ "="+"\'"+i+"\'", null) ;
    c.requery();

}

我从高效适配器的视图中调用它。下面是我称之为的代码:

        holder.del.setOnClickListener(new OnClickListener() {
                private int pos=position;
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    final long newpos;
                    sql_get db = new sql_get(c);
                    db.open();

                    db.delete(DATA[pos]);               
                    notifyDataSetChanged();                     
                    db.close();
                }
            });

谁能帮我找出问题所在。它没有给出任何错误。它只是删除了该行,但没有更新视图。

这是我使用的适配器:

    private static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private Bitmap mIcon1;
    private Bitmap mIcon2;
    private Bitmap mIcon3;
    private Bitmap mIcon4;

    Context c;
    int window;

    public EfficientAdapter(Context context) {
        // Cache the LayoutInflate to avoid asking for a new one each time.
        mInflater = LayoutInflater.from(context);
        this.c=context;
        // Icons bound to the rows.
        mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_1);
        mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_2);
        mIcon3 = BitmapFactory.decodeResource(context.getResources(), R.drawable.del1);
        mIcon4 = BitmapFactory.decodeResource(context.getResources(), R.drawable.edit);
    }       
    public int getCount() {
        return DATA.length;
    }       
    public Object getItem(int position) {
        return position;
    }   
    public long getItemId(int position) {
        return position;
    }       
    public View getView(final int position, View convertView, ViewGroup parent) {
        // A ViewHolder keeps references to children views to avoid unneccessary calls
        // to findViewById() on each row.
        ViewHolder holder;
        //int i=0;


            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

            // Creates a ViewHolder and store references to the two children views
            // we want to bind data to.
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.icon = (ImageView) convertView.findViewById(R.id.icon);
            holder.del=(ImageView)convertView.findViewById(R.id.icon1);
            holder.edit=(ImageView)convertView.findViewById(R.id.icon2);

            window=position;
            holder.text.setOnClickListener(new OnClickListener() { 
                private int pos=position;

                //private int pos = position; 
                public void onClick(View v) { 

                    System.out.println(window);
                    sql_get db = new sql_get(c);
                    db.open();
                    String ret_id= db.getid(DATA[pos]);
                    String ret_name = db.getname(DATA[pos]);                        
                    String ret_age= db.getage(DATA[pos]); 
                    String ret_fhr= db.getfhr(DATA[pos]);                       
                    String[] result = {ret_id,ret_name,ret_age,ret_fhr};
                    db.close();
                    Bundle b=new Bundle();
                    b.putStringArray("key",result); 
                    Intent i =new Intent(c,Tabs.class);
                    i.putExtras(b);
                    c.startActivity(i)  ;
                    Toast.makeText(c, getItemId(position)+""+" Click- text " +pos+" "+ret_name, Toast.LENGTH_SHORT).show();
                } 
            });                 
            holder.del.setOnClickListener(new OnClickListener() {
                private int pos=position;
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    final long newpos;                      
                    sql_get db = new sql_get(c);
                    db.open();
                    db.delete(DATA[pos]);                       
                    notifyDataSetChanged();                     
                    db.close();                     
                    Toast.makeText(c, "deleting " + DATA[pos], Toast.LENGTH_SHORT).show();                      
                }
            });
            convertView.setTag(holder);
        }           
        holder.text.setText(DATA[position]);
        holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
        holder.del.setImageBitmap(mIcon3);
        holder.edit.setImageBitmap(mIcon4);
        return convertView;     
    static class ViewHolder {
        ImageView del;
        TextView text;
        ImageView icon;
        ImageView edit;
    }       
}
4

3 回答 3

1

您还需要从保存列表视图数据的对象中删除该行。

于 2012-09-24T09:50:36.323 回答
1

我认为您还必须从适配器中删除相同的数据,然后使用 your_adapter.notifyDataSetChanged() 方法。这对我有用...

于 2012-09-24T09:55:12.433 回答
1

我找到了解决方案。如上所述,我必须更改 DATA 对象。我使用以下命令来实现它。

db.open();                                      
db.delete(DATA[pos]);           
DATA=db.getdata();
DATA_NAME=db.getname();
DATA_AGE=db.getage();
DATA_FHR=db.getfhr();                                                   
db.close();
于 2012-11-26T09:41:12.667 回答