Каков наилучший способ обработки представления списка, курсор которого часто читает и пишет? - PullRequest
2 голосов
/ 07 сентября 2011

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

В настоящее время я использую класс, производный от SimpleCursorAdapter, для отображения данных, но я не уверен, как обновить количество в БД. Я боюсь, что если я напишу напрямую в БД, а затем создам новый курсор и изменим курсор, приложение может зависнуть, если пользователь нажимает несколько раз (скажем, для добавления 10 элементов)

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

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

Есть ли лучший способ? Еще способ Android?

Полагаю, это сводится к следующему: каков наилучший способ быстрого изменения БД и пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Вы можете использовать обычный listView и обычный адаптер со списком (массивом) элементов в нем.Каждый раз, когда пользователь нажимает или долго щелкает, вы можете редактировать список в своем адаптере и вызывать notifyDataChanged (), который будет отражать изменения списка в вашем listView.Если вы хотите сохранить свой список после того, как пользователь закроет ваше приложение, вы можете использовать либо базу данных (для большего объема данных), либо настройки (для меньшего объема данных).

0 голосов
/ 07 сентября 2011

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

Допустим, вы отображаете коллекцию типа Item в своей сетке. Я бы создал класс с именем ItemsList, который наследуется от ArrayList<Item>, а мой адаптер будет производным от ArrayAdapter<Item>. Причина, по которой вы создаете оболочку вокруг ArrayList, заключается в том, что вы можете позволить пользователю свободно взаимодействовать с ним, пометить его как «грязный» и позволить ему асинхронно обновлять базу данных. Таким образом, вы просто вызываете notifyDataSetChanged() на своем адаптере, и вам не нужно думать о накладных расходах на обновление базы данных ... вы разделили взаимодействие с отображаемой коллекцией и процессом обновления постоянного хранилища.

Кстати ... это видео обязательно при работе с ListViews и адаптерами, если вы его еще не видели:

http://www.youtube.com/watch?v=wDBM6wVEO70

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...