Как удалить выбранный элемент из списка с помощью CursorAdapter

Я использую CursorAdapter а ниже – мой класс адаптера. Мой список состоит из двух текстовых представлений и одной кнопки в каждой строке. Теперь, щелкнув по кнопке, я хочу удалить выбранный элемент из списка, а также из базы данных. Как я могу получить идентификатор выбранного элемента из базы данных, чтобы удалить его, а затем уведомить об этом адаптер (обновить список).

 public class MyAdapter extends CursorAdapter { Cursor c; LayoutInflater inflater; Context context; private String TAG = getClass().getSimpleName(); public MyAdapter(Context context, Cursor c) { super(context, c); this.c = c; this.context = context; inflater = LayoutInflater.from(context); } @Override public void bindView(View view, Context context, final Cursor cursor) { TextView txtName = (TextView) view.findViewById(R.id.txt_name); txtName.setText(cursor.getString(cursor.getColumnIndex(Helper.tbl_col_username))); TextView txtPassword = (TextView) view.findViewById(R.id.txt_password); txtPassword.setText(cursor.getString(cursor.getColumnIndex(Helper.tbl_col_password))); Button button = (Button) view.findViewById(R.id.btn_delete); button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Log.d(TAG, "Button Click "); } }); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View v = inflater.inflate(R.layout.row, null); return v; } } 

Solutions Collecting From Web of "Как удалить выбранный элемент из списка с помощью CursorAdapter"

Попробуйте что-то вроде этого:

 @Override public void bindView(View view, Context context, final Cursor cursor) { TextView txtName = (TextView) view.findViewById(R.id.txt_name); txtName.setText(cursor.getString(cursor.getColumnIndex(Helper .tbl_col_username))); TextView txtPassword = (TextView) view.findViewById(R.id.txt_password); txtPassword.setText(cursor.getString(cursor.getColumnIndex(Helper .tbl_col_password))); final String itemId = cursor.getString(cursor.getColumnIndex("id")); Button button = (Button) view.findViewById(R.id.btn_delete); button.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { Log.d(TAG, "Button Click "); deleteRecordWithId(itemId); cursor.requery(); notifyDataSetChanged(); } }); } 

Я предполагаю, что этот идентификатор находится в курсоре. Затем просто создайте свой собственный класс DeleteEntryOnClicklistener, который реализует OnClickListener и пусть он принимает идентификатор в своем конструкторе и удаляет запись при нажатии.

Прошу прокомментировать, если я неправильно понял вашу проблему, или если я не понял, ура 🙂

редактировать:

В bindView() измените OnClicklistener на что-то вроде этого:

 long id = cursor.getLong(cursor.getColumnIndex(Helper.tbl_col_id)); button.setOnClicklistener(new DeleteEntryOnClicklistener(id)); 

И DeleteEntryOnClicklistener должен выглядеть примерно так:

 public class DeleteEntryOnClicklistener implements View.OnClickListener { long id; public DeleteEntryOnClicklistener(long id) { this.id = id; } @Override public void onClick(View v) { database.deleteEntry(id); } }