Как работает функция удаления строк в учебнике по Android-блокноту? - PullRequest
0 голосов
/ 03 июля 2011

В настоящее время я работаю над учебником по блокнотам, а упражнение 2 завершает код для удаления заметок. Тем не менее, я немного запутался, как это работает. Вот соответствующий код:

public boolean onContextItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case DELETE_ID:
            AdapterContextMenuInfo info = 
                    (AdapterContextMenuInfo) item.getMenuInfo();
            mDbHelper.deleteNote(info.id);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}

В упражнении говорится: «Поле id этого объекта [AdapterContextMenuInfo] сообщает нам позицию элемента в ListView. Затем мы передаем это методу deleteNote () нашего NotesDbAdapter, и заметка удаляется».

Глядя на определение базы данных, поля идентификаторов вновь добавленных строк / заметок в базу данных автоматически генерируются с помощью автоматически увеличивающегося числа. Поэтому, если у нас есть 4 заметки с идентификаторами 1,2,3,4 (не уверен, проиндексирован ли его ноль или нет!) И удаляем вторую заметку, не должны ли мы остаться с идентификаторами 1,3,4? Что означает, что попытка удалить последнюю заметку (которая теперь является третьей в списке, но все еще с ее первоначальным 4-м индексом) должна вместо этого удалить строку с индексом = 3? Или строки автоматически переиндексируются при удалении строки?

Наконец, вы можете просмотреть / просмотреть базу данных на вашем телефоне для приложения?

1 Ответ

1 голос
/ 03 июля 2011

Мне кажется, что кто-то допустил небольшую ошибку при написании текста примера. Если вы видите документацию для поля id поля AdapterContexteMenuInfo , в нем говорится, что возвращается идентификатор строки элемента. Это обеспечивается вашим Adapter getId() методом.

И, да, вы можете прочитать базу данных вашего телефона. Вы подключаетесь к оболочке эмулятора (если вы используете эмулятор) с помощью этой команды из командной строки:

   adb -e shell

Затем вы переходите в папку вашего приложения (в /data/data/com.yourpackage). Там должна быть папка databases. Из оболочки введите sqlite3 <databaseFileName>. Затем вы можете выполнять любые поддерживаемые операции с базой данных (выбрать, обновить и т. Д.). Проверьте эту страницу , там даже есть раздел на sqlite3.

...