Совместное использование курсора между действиями - PullRequest
3 голосов
/ 21 ноября 2010

Я думаю, что следующий сценарий является распространенным, но я не могу понять, как его реализовать:

У нас есть три действия и одна база данных.Мы просим пользователя ввести данные для поиска в базе данных.Запрос должен получить ни одного, ни одного, или может привести к результатам.

  • Если вы не получили ни одного, просто сообщите пользователю.
  • Если вы получите только один, вы показываете его в новом действии справильное представление.
  • Если вы получаете много, вы показываете их в списке, чтобы позволить пользователю выбрать правильное, а затем передаете это в действие, которое показывает данные только в случае одного результата.

Проблема в том, что для того, чтобы узнать количество результатов, вам нужно выполнить запрос (и получить курсор) в первом действии.И в случае, если вы получаете более одного результата, вам нужно отправить данные ( передать курсор? ) в список активности.Повторное выполнение запроса в списке действий не может быть правильным, верно?

Я знаю, что вы можете совместно использовать курсоры с помощью поставщика контента, но поскольку действия выполняются из одного приложения, а данныеприватный (бесполезный снаружи), не вижу смысла делать его доступным для кого-либо еще.

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

Есть идеи, как решить эту проблему?

Заранее спасибо.

1 Ответ

3 голосов
/ 21 ноября 2010

Опция # 1: запрос, выполняемый поисковым действием, просто SELECT _ID FROM ... В случае «нет» он отображает сообщение. В случае «одного» он передает соответствующий _ID в подробное действие для просмотра соответствия, запрашивая все необходимые столбцы для этой одной строки. В случае «много» он передает условия поиска в действие списка, которое выполняет полный запрос (включая все столбцы, необходимые для отображения списка).

Вариант № 2: Объединить поисковое действие и действие списка в одно действие. По сути, рассматривайте «поиск и выбор элемента для просмотра» как «транзакцию пользовательского интерфейса» и делайте все это в рамках одного действия. Операция поиска будет выполнять запрос, достаточный для заполнения списка в случае «много», отображая список в AlertDialog или в самом основном действии через ViewFlipper или что-то еще. В случае «нет», это отображает сообщение. В случае «одного» - или когда пользователь нажимает на запись в списке - он передает материал в детальное действие для просмотра элемента.

Опция № 3: Переместите поисковый запрос в действие списка - ваша поисковая операция передает информацию поиска в действие списка через дополнительные функции, которые rawQuery() in onCreate(). Деятельность со списком обрабатывает случаи «нет» и «много». В случае «одного» он просто вызывает startActivity() для операции детализации и finish(), поэтому управление возвращается к операции поиска, когда пользователь нажимает НАЗАД.

При прочих равных, я бы, наверное, выбрал вариант №2.

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