Как обновить текущую активность вкладок после завершения обработки запроса HttpGet в первой активности вкладок? - PullRequest
2 голосов
/ 11 сентября 2011

У меня есть две вкладки приложения. На первой вкладке я выполняю поисковый запрос http, выводя результаты и вставляя их в базу данных. Вторая вкладка показывает данные из базы данных. Если пользователь выполняет поиск на первой вкладке и переходит на вторую вкладку до завершения поиска, после завершения поиска данные на второй вкладке должны быть обновлены.

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

1 Ответ

0 голосов
/ 01 февраля 2012

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

Способ, которым явидите, у нас есть следующие задачи для решения

  1. Вы хотите сделать HTTP-вызов и затем обновить пользовательский интерфейс, будучи вкладкой 1
  2. Вы хотите запросить экземпляр SQLite и отобразитьданные в пользовательском интерфейсе, являющиеся вкладкой 2
  3. Каждый раз, когда поиск вызывается на вкладке 1, по завершении он должен обновить вкладку 2

Позвольте мне прокомментировать каждую из 3 задач, которые вам нужнысделать

Вы хотите сделать HTTP-вызов и затем обновить пользовательский интерфейс, используя вкладку 1

Поскольку вы собираетесь делать внешние вызовы здесь, это можетНе торопитесь, лучше всего использовать AsyncTask.Если вы попытаетесь выполнить HTTP-вызов в главном потоке приложения, и это займет слишком много времени, ваше приложение будет аварийно завершено, поэтому используйте AsyncTask для выполнения вызова и обновите пользовательский интерфейс при необходимости.

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

Это может помочь вам:

private class CallHTTP extends AsyncTask<String, Integer, Bitmap>
    {
        @Override
        protected void onPreExecute()
        {
            // initialise any UI stuff here
        }

        @Override
        protected Bitmap doInBackground(String... strings)
        {
            //actually make the HTTP call here
        }

        protected void onPostExecute(final Bitmap result)
        {
            //when you're done, update the UI here or fire off another activity
        }
    }

В onPostExecute() вы можете создать намерение для вашей второй вкладки, например что-то вроде

Intent i = new Intent(this, MyActivity.class);
            startActivity(i);

Вы хотите запросить экземпляр SQLite и отобразить данные в пользовательском интерфейсе,будучи вкладкой 2

Примерно так же, как описано выше, вы захотите, чтобы AsyncTask выполнял тяжелую (в относительном выражении) работу по запросу базы данных, использовал вышеуказанную стратегию и обновлял пользовательский интерфейскогда вы закончите. Это может помочь вам начать работу на стороне SQLite .

Каждый раз, когда поиск вызывается на вкладке 1, по завершении он должен обновить вкладку 2

Если вы следуете совету, который я дал выше, вы должны неявно получать обновления на вкладке 2 каждый раз, когда поиск по вкладке 1 завершается, так как ее onPostExecute() запустит действие, заставив его нажать onResume(), где вы можете сбросить содержимоеview.

Я надеюсь, что он предоставил вам достаточно информации, чтобы вы начали

Cheers

...