2010-11-21 4 views
3

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

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

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

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

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

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

Любая идея о том, как решить эту проблему?

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

ответ

3

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

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

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

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

+0

Я пошел на 3-й вариант, потому что я не знал о ViewFlipper (я все еще ноб). Я согласен с вами, второй вариант - это то, что мне лучше. Я попробую. Спасибо – Asincrono

+0

@CommonsWare Op # 2 - это то, что я реализовал.Мне было интересно, можно ли передать курсор вместо материала? Я прочитал, что вы можете создать приложение (myApp extends Application), как это делается здесь: http://stackoverflow.com/a/8456148/317889 и сохранить курсор для использования во всех действиях, будет ли это нормальным? – HGPB

Смежные вопросы