我正在创建一个使用DashboardActivity& amp;一个SettingsActivity。在仪表板上,我显示了一个对象,但是当我进入设置时,我希望能够选择/取消选择X选项。一旦用户单击后退按钮,我将该数据保存在本地并保存到服务器。一旦手机收到来自服务器的成功消息,表明它已正确存储,我想重新加载仪表板。
我以为我会使用onPause和onResume执行此操作,但是在首次创建DashboardActivity时会调用它们。将设置保存到服务器后,通过调用我的Web服务重新加载仪表板的最佳方法是什么?这是我在按下后退按钮时正在做的事情
@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有什么建议?
答案 0 :(得分:1)
您可以继承Application
并设置一个标志,以显示您当前的缓存数据是“脏”的。您可以创建自己的Application
子类来存储 transient 全局应用程序状态,这正是您想要的。当用户在SettingsActivity
中更改其配置时,您在应用程序级别设置标志,然后在onResume()
中,您可以检查该标志,并在您知道用户更改了某些内容时仅调用Web服务。
或者,您可以将DashboardActivity
设置为singleTop
launch mode然后使用startActivity()
来自SettingsActivity
移至DashboardActivity
,如果设置有改变。如果DashboardActivity
为singleTop
,则系统不会创建新实例,新的Intent
会传递给onNewIntent()
method,您可以在那里重新加载设置。