我有一个填充列表视图的游标适配器,它工作正常。
我想删除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));
}
}
你能帮帮我吗?
答案 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的地方发布代码吗?