Страницы

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

вторник, 25 февраля 2020 г.

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

#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);

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

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