2011-05-01 82 views
2

我想知道我应该如何解决一个问题。模式等待下载的数据

当我开始一个活动时,我使用AsyncTask下载了一些数据。

当用户在菜单上选择一个选项时,我使用缓存的数据。

如果在数据仍在下载时选择选项,该怎么办? 在不阻挡用户界面的情况下等待数据的最佳方式是什么?

编辑:我不想更改菜单/禁用选项。我想在等待数据完成下载时显示微调。

感谢

+0

考虑将标志isDoneDownloading设置为false,并在用户尝试使用返回有用用户反馈的菜单中的数据时检查此标志。在onPostExecute中将该标志设置为true。这不会阻止用户在数据下载过程中在UI中执行其他操作。 – JAL 2011-05-01 23:46:47

回答

3

禁用/启用在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()它的时候你完成了。

+0

这是一个解决方案,但我不想更改菜单,我希望在等待下载结束时放置微调器。我会更新我的问题。感谢您的想法 – Jonas 2011-05-01 18:40:12

+0

正确,那么您可以在等待时显示ProgressDialog。编辑答案。 – dmon 2011-05-01 18:43:31

+0

当然,但我如何检测下载的结束? – Jonas 2011-05-01 18:47:13

1

当按下菜单选项时,您可以调用AsyncTask.getStatus(),如果它仍在运行,则显示ProgressDialog。

然后在AsyncTask.onPostExeute()您可以告诉您的活动数据可用并关闭微调。

+0

如果我有:1. main:getStatus == RUNNING。 2.在Asyntask;任务完成并解除对话框。 3.主要:主要举行,现在只显示对话框。它永远被锁定:/ – Jonas 2011-05-01 19:02:29

+0

那么一旦用户按下菜单项并且数据没有准备好,你想要做什么?如果您只是希望它在等待时显示一个微调框,为什么不阻止UI并在主窗口中启动微调框。然后,当AsyncTask完成时,它可以告诉main和main,然后关闭微调器并使用数据。 – TrevorBliss 2011-05-01 19:25:26

0

启动下载时运行不可取消的进度对话框,下载完成后关闭。请阅读ProgressDialog课程。

+0

我不想在后台下载时阻止用户!他可能不想在下载后立即使用数据。 – Jonas 2011-05-01 19:17:44

+0

@Jonas:如果你不想禁用菜单项,并且不想让它们无法使用(通过模态ProgressDialog),请将检查下载状态插入到菜单项处理程序中,并将AlertDialog闪烁为“稍后再试”。 – 2011-05-02 00:20:19