Путаница с адаптерами ListView

1

У меня возникли проблемы с пониманием того, как обновить ListView. Когда пользователь нажимает на элемент списка, элемент удаляется из базы данных, и ListView должен обновляться, чтобы показать, что он больше не существует. Однако список не обновляется, и я не уверен, что делаю это правильно.

Вот мой код:

package com.typhoon2099.mediacatalogue;

import android.os.Bundle;
import android.app.ListActivity;
import android.database.Cursor;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

    public class DVDs extends ListActivity {
    private DatabaseHelper database;
    private static final String MEDIA_TYPE = "DVD";
    private Cursor ListCursor;
    private BaseAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        database = new DatabaseHelper(this);
        database.open();

        ListCursor = database.selectMedia(MEDIA_TYPE);
        database.close();
        startManagingCursor(ListCursor);

        adapter = new SimpleCursorAdapter(this,
            R.layout.listlayout,
            ListCursor,
            new String[] {DatabaseHelper.TABLE_NAME+".title", DatabaseHelper.TABLE_NAME+".author"},
            new int[] {R.id.text1, R.id.text2});
        setListAdapter(adapter);

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
                database.open();
                database.deleteMedia(String.valueOf(id));
                ListCursor = database.selectMedia(MEDIA_TYPE);
                adapter.notifyDataSetChanged();
                setListAdapter(adapter);
                database.close();
            }
        });
    }
}

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

Теги:
listview
cursor

2 ответа

0

Работает ли этот вариант?

lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            database.open();
            database.deleteMedia(String.valueOf(id));
            database.close();
            adapter.notifyDataSetChanged(); // maybe use notifyDataSetInvalidated()
        }
    });
0

Вызовите notifyDataSetChanged() в своем адаптере.

  • 0
    adapter.notifyDataSetChanged(); ? Это уже там после обновления курсора.
  • 0
    почему вы используете setListAdapter (адаптер); в onitemclicklistner?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню