2010-04-19 2 views
2

У меня есть приложение, которое я создаю с помощью DashboardActivity & a SettingsActivity. На панели инструментов у меня отображается один объект, но когда я вхожу в настройки, я хочу иметь возможность выбирать/отменить выбор X. Как только пользователь нажимает кнопку «Назад», я сохраняю эти данные локально и на сервере. Как только телефон получает сообщение об успешном завершении работы сервера, я хочу перезагрузить приборную панель.Резюме Активность с обратной кнопкой

Я думал, что сделаю это с onPause и onResume, но они вызывается, когда DashboardActivity сначала создается. Каким будет лучший способ перезагрузить панель управления, вызвав мою веб-службу после сохранения настроек на сервер? Вот то, что я делаю, когда кнопку назад ударили

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Save data to the server once the user hits the back button 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     SchoolSearchActivity.this.divisionProxy = new DivisionProxy(SchoolSearchActivity.this.saveUserDivisionHandler); 
     SchoolSearchActivity.this.divisionProxy.submitUserDivisions(SchoolSearchActivity.this.userDivisions, SchoolSearchActivity.this.user_id); 
     //SchoolSearchActivity.this.finish(); 
     //Toast.makeText(SchoolSearchActivity.this, "Divisions Saved",Toast.LENGTH_LONG).show(); 
    } 
    return true; 
} 

выше открывает соединение HTTP, и, когда будет получен ответ, то обработчик обрабатывает ответ. Я хочу: 1) отправить данные на сервер 2) вернуться к предыдущему действию 3) показать диалог прогресса до тех пор, пока ответ от # 1 не вернется (обработчик ответа находится в активности настроек, и теперь мы находимся в приборная панель) 4) «обновить» приборную панель

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

Что вы предложите для 1-4?

ответ

1

Вы можете подкласса Application и установить флаг, чтобы показать, что вы в настоящее время кэшированные данные «грязные». Вы создаете свой собственный подкласс Application для хранения переходного процесса глобального состояния приложения, которое именно то, что вы хотите здесь. Когда пользователь изменяет свою конфигурацию в SettingsActivity, вы устанавливаете флаг на уровне приложения, а затем в onResume() вы можете проверить флаг и только вызвать веб-службу, когда знаете, что пользователь что-то изменил.

В качестве альтернативы, когда вы можете установить ваш DashboardActivity иметь singleTop launch mode, а затем использовать startActivity() вызов, чтобы перейти от SettingsActivity к DashboardActivity, если настройки были изменены. Если DashboardActivity - singleTop, то новый экземпляр не будет создан, а новый Intent будет передан в onNewIntent() method, и вы можете перезагрузить там свои настройки.

+0

Подклассов Приложение выглядит так, как мне нужно. У вас есть ссылки, которые показывают, как другие могут использовать это в подобной ситуации? Я читал о людях, хранящих состояния в классе Application, просто не видел хороших примеров. Благодаря! – Nathan

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