У меня есть ListView связанный с БД через MySimpleCursorAdapter (extends android.widget.SimpleCursorAdapter)
И свой файл разметки, в котором есть кнопка удалить.
Я хочу при нажатии на кнопку удалить строку из БД и тут же обновить ListView
Всю логику нажатия на кнопку я реализую в MySimpleCursorAdapter
Как мне обновить ListView находясь в MySimpleCursorAdapter?
public class MySimpleCursorAdapter extends android.support.v4.widget.SimpleCursorAdapter implements View.OnClickListener {
......
public View getView(final int position, View convertView, ViewGroup parent) {
ImageView IV_delete = (ImageView) view.findViewById(R.id.item_imageView_delete_note);
.....
IV_delete.setOnClickListener(this);
}
@Override
public void onClick(View v) {
...
case R.id.item_imageView_delete_note:
Log.d(MainActivity.MY_TAG, "delete" + getItemId(lposition));
MainActivity.db.delete_row(getItemId(lposition));
}
}
Ответ
Чтобы обновить список, подключенный к адаптеру на основе CursorAdapter, нужно вызвать метод changeCursor() - он информирует адаптер, что данные в курсоре изменились и нужно перестроить список используя новые данные.
Вызвать данный метод можно непосредственно в любом другом методе или конструктуре класса адаптера:
public class MySimpleCursorAdapter extends android.support.v4.widget.SimpleCursorAdapter implements View.OnClickListener {
......
public View getView(final int position, View convertView, ViewGroup parent) {
ImageView IV_delete = (ImageView) view.findViewById(R.id.item_imageView_delete_note);
.....
IV_delete.setOnClickListener(this);
}
@Override
public void onClick(View v) {
...
case R.id.item_imageView_delete_note:
Log.d(MainActivity.MY_TAG, "delete" + getItemId(lposition));
MainActivity.db.delete_row(getItemId(lposition));
changeCursor();
}
}
так и "извне" - обратившись к экземпляру вашего адаптера, подключенного к списку:
MySimpleCursorAdapter myAdapter = new MySimpleCursorAdapter(...);
listView.setAdapter(myAdapter);
....
myAdapter.changeCursor(); // обновить список
Комментариев нет:
Отправить комментарий