Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Как обновить ListView из кастомного SimpleCursorAdapter

У меня есть 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(); // обновить список

Комментариев нет:

Отправить комментарий