Подход результатов поиска для Android - PullRequest
1 голос
/ 16 декабря 2009

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

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

Затем я запускаю экран результатов поиска, используя

Intent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
startActivity(mainIntent);

для метода 'SearchResults' метод 'oncreate' я загружаю данные от имени статического компонента, значения которого заполняются из формы поиска, а затем отображает данные.

@Override
    public void onCreate(Bundle savedInstanceState) {
        loadDataAndSetupUI();
        super.onCreate(savedInstanceState);
    }

У меня вопрос: правильно ли использовать его или в Android есть другой предпочтительный подход?

приветствуется любая быстрая идея или быстрый код.

1 Ответ

2 голосов
/ 16 декабря 2009

Ну, как правило, обработчик onCreate вашего экрана результатов определенно является хорошим местом для этого. Однако, читая между строк вашего вопроса, я заметил, по крайней мере, две вещи, которые могут вызвать проблемы:

Во-первых, использование статического объекта для переноса значений из одного действия в другое, безусловно, является неправильным подходом. Это потому, что, во-первых, в Android уже есть четко определенный механизм обмена данными между контекстами, и это через Связки и Intents . Итак, чтобы рассказать вашему результату активности о том, что ищет ваш пользователь, сделайте что-то вроде этого:

Intent mainIntent = new Intent(SearchVenueResults.this, SearchResults.class);
mainIntent.putExtra("search_query", getValueFromSearchBox());
startActivity(mainIntent);

В вашей активности SearchResults сделайте это в onCreate:

public void onCreate(Bundle savedInstanceState) {
    String searchQuery = getIntent().getExtras().getStringExtra("search_query");
    loadDataAndSetupUI(searchQuery);
    super.onCreate(savedInstanceState);
}

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

Во-вторых, вы определенно не хотите реализовывать loadDataAndSetupUI для синхронной работы. Это блокирует ваш пользовательский интерфейс до тех пор, пока поиск не прекратится, и Android может даже решить убить ваше приложение. Вместо этого используйте AsyncTask для фоновых заданий.

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