android-不能从数据库onLongItemClickListener listview中删除项目

时间:2014-05-22 07:48:46

标签: android android-listview android-sqlite

我有一个填充列表视图的游标适配器,它工作正常。 我想删除onLongItemClickListener的项目。 我写了这段代码,但我知道这是错的,因为我不知道数据库行ID是什么。

        lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, final View view,final int position, long id) {

            builder= new AlertDialog.Builder(MainActivity.this);
            builder.setMessage(R.string.deleteit)
                   .setCancelable(true)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           // myDb.deleteRow(position);
                       }
                   });
            AlertDialog alert = builder.create();
            alert.show();
            return false;
        }

    });

我从onItemLongClick (id)记录了第三项,每行返回-1

这就是我填写listView的方式

cursor = myDb.getAllRows();
adapter_comments = new TimeListAdapter(MainActivity.this, cursor);
lv.setAdapter(adapter_comments);

这是我的cursorAdapter

public class TimeListAdapter extends CursorAdapter {
    public TimeListAdapter(Context context, Cursor c) {
        super(context, c);
    }

    public class ViewHolder {
        TextView tvTitle;
        TextView tvt9;

        public ViewHolder(View row) {
            tvTitle = (TextView) row.findViewById(R.id.title);
            tvt9 = (TextView) row.findViewById(R.id.textView9);

        }
    }

    @Override
    public View newView(Context context, Cursor arg1, ViewGroup arg2) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.spots_custom_listview, arg2,false);
        ViewHolder holder = new ViewHolder(row);
        row.setTag(holder);
        return row;
    }

    @Override
    public void bindView(View v, Context context, Cursor c) {
        ViewHolder holder = (ViewHolder) v.getTag();
        holder.tvTitle.setText(c.getString(5));
        holder.tvt9.setText(c.getString(4));

    }
}

你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

public void onClick(DialogInterface dialog, int id) {
     // First you have to get cursor using position
     Cursor cursor = (Cursor) lv.getItemAtPosition(position);

     //Now you can get id using column name of ROW_ID
     int id = cursor.getInt(cursor.getColumnIndex("your_row_id_column_name"));

     //Now delete you row
     myDb.deleteRow(id);
}

如果有任何疑问,请随意ping。

答案 1 :(得分:-1)

onItemLongClick的第3个参数是BaseColumns._ID值。

现在,你提到它返回-1,所以列表或适配器出了问题。

您传递给cursorAdapter的光标可能不包含_ID列作为投影的一部分。

您可以在创建cursorAdapter的地方发布代码吗?