我想知道我应该如何解决一个问题。模式等待下载的数据
当我开始一个活动时,我使用AsyncTask
下载了一些数据。
当用户在菜单上选择一个选项时,我使用缓存的数据。
如果在数据仍在下载时选择选项,该怎么办? 在不阻挡用户界面的情况下等待数据的最佳方式是什么?
编辑:我不想更改菜单/禁用选项。我想在等待数据完成下载时显示微调。
感谢
我想知道我应该如何解决一个问题。模式等待下载的数据
当我开始一个活动时,我使用AsyncTask
下载了一些数据。
当用户在菜单上选择一个选项时,我使用缓存的数据。
如果在数据仍在下载时选择选项,该怎么办? 在不阻挡用户界面的情况下等待数据的最佳方式是什么?
编辑:我不想更改菜单/禁用选项。我想在等待数据完成下载时显示微调。
感谢
禁用/启用在onMenuOpened()的项目:
@Override
public boolean onMenuOpened(int feature, Menu menu) {
if (menu != null) {
menu.getItem(INDEX_FOR_THE_MENU_ITEM).setEnabled(stuffIsAvailable);
}
return super.onMenuOpened(feature, menu);
}
编辑 - 显示进度对话框:
ProgressDialog dialog = new ProgressDialog(context);
dialog.setMessage(context.getString(dialogTextResourceId));
dialog.show();
不要忘了dialog.dismiss(
)它的时候你完成了。
当按下菜单选项时,您可以调用AsyncTask.getStatus()
,如果它仍在运行,则显示ProgressDialog。
然后在AsyncTask.onPostExeute()
您可以告诉您的活动数据可用并关闭微调。
如果我有:1. main:getStatus == RUNNING。 2.在Asyntask;任务完成并解除对话框。 3.主要:主要举行,现在只显示对话框。它永远被锁定:/ – Jonas 2011-05-01 19:02:29
那么一旦用户按下菜单项并且数据没有准备好,你想要做什么?如果您只是希望它在等待时显示一个微调框,为什么不阻止UI并在主窗口中启动微调框。然后,当AsyncTask完成时,它可以告诉main和main,然后关闭微调器并使用数据。 – TrevorBliss 2011-05-01 19:25:26
启动下载时运行不可取消的进度对话框,下载完成后关闭。请阅读ProgressDialog
课程。
我不想在后台下载时阻止用户!他可能不想在下载后立即使用数据。 – Jonas 2011-05-01 19:17:44
@Jonas:如果你不想禁用菜单项,并且不想让它们无法使用(通过模态ProgressDialog),请将检查下载状态插入到菜单项处理程序中,并将AlertDialog闪烁为“稍后再试”。 – 2011-05-02 00:20:19
考虑将标志isDoneDownloading设置为false,并在用户尝试使用返回有用用户反馈的菜单中的数据时检查此标志。在onPostExecute中将该标志设置为true。这不会阻止用户在数据下载过程中在UI中执行其他操作。 – JAL 2011-05-01 23:46:47