#java #android #listview #cursoradaper
У меня есть 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)); } }
Ответы
Ответ 1
Чтобы обновить список, подключенный к адаптеру на основе 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(); // обновить списокОтвет 2
1.Испольозвать CursorLoader. 2.Можно просто обновить и свапнуть курсоры. private Db mDbAdapter; private Cursor mCursor; private SimpleCursorAdapter mCursorAd; ..................................... //After removing the item from the DB, use this ..................................... mCursor = mDbAdapter.getAllItems(); mCursorAd.swapCursor(mCursor);
Комментариев нет:
Отправить комментарий