【发布时间】:2010-07-07 22:14:52
【问题描述】:
我有以下问题。我的主要活动包括一个 ListView,其中填充了从 Web 服务获得的数据。首次加载主要活动时,如果无法从网络检索数据,我想显示一个带有 2 个按钮的对话框,“重试”和“取消”。如果用户点击“回复”,则调用重新加载数据方法,如果有任何异常,对话框应该会再次出现。
我还没有找到实现我想要的行为的方法。
@Override
protected void onResume() {
super.onResume();
Log.i("ItemListActivity", "onResume()");
if(isNewInstance) {
reloadItems();
isNewInstance = false;
}
}
private void reloadItems() {
try {
itemService.reloadItems();
items = itemService.getItemList();
listAdapter.notifyDataSetChanged();
} catch (Exception e) {
showDialog(RETRY_DIALOG);
}
}
protected Dialog onCreateDialog(int id) {
switch(id) {
case RETRY_DIALOG:
return new AlertDialog.Builder(this).setTitle(R.string.retryDialog_title)
.setPositiveButton(R.string.retryDialog_retry, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
reloadItems();
}
})
.setNegativeButton(R.string.retryDialog_quit, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.create();
}
return null;
}
第一次从 onResume() 调用 reloadItems() 并遇到异常时,将显示对话框。但是当我单击“重试”按钮并且这次从对话框的 onclicklistener 调用 reloadItems() 时,该对话框不会第二次显示,我猜是因为 onclicklistener 只会在 reloadItems() 第二次返回后返回.
我尝试在 onClick() 的新线程中运行 reloadItems(),但代码仍在主线程中运行。如果我在新线程中从 onResume() 运行 reloadItems(),代码会在新线程中运行。
我在调试时还注意到,在 showDialog(RETRY_DIALOG) 返回后,对话框没有立即显示,只有在 reloadItems() 返回后才显示。
由于我想做的是非常常见的行为,我确信有一个“最佳实践”解决方案。我是 Android 新手,不习惯这种风格。
【问题讨论】:
标签: android