【问题标题】:Show activy after data is downloaded下载数据后显示活动
【发布时间】:2014-02-28 16:17:33
【问题描述】:

我有一个名为 SpotDetails 的活动,它是一个从 xml 收集大量信息然后将其显示给用户的活动。

我的问题是,我最好在应用程序下载数据并填充 SpotDetails 变量时显示进度对话框。填充变量后,我想显示活动并填充 TextView。

我怎么能做到这一点?

我现在拥有的实际上是两个在 onCreate 上启动的异步线程。这会为用户生成一个缓慢的 UI,并在 Activity 上生成许多实际上不需要存在的代码。

更新:

公关。现在我没有显示任何我尝试使用该行实现 ProgressDialog 的内容:

Progress Dialog pDialog = new ProgressDialog(spotDetails.getApplicationContext());

请注意,Async 是 SpotDetails 之外的另一个类。

但我得到一个很长的例外:

StackOverflow 不会接受代码,所以这里是: http://pastebin.com/AJqJFvMM

【问题讨论】:

  • 使用AsyncTask 并在您的视图上添加叠加层。完成下载和解析 XML 后,只需隐藏该视图即可。
  • onPreExecute() 上显示进度对话框并在onPostExecute() 方法上将其关闭。你在做什么?

标签: android asynchronous task


【解决方案1】:

如果我对您的理解正确,您已经通过asyncTask 获取信息,这是可行的方法,您担心的是,在该过程完成之前,活动不会显示任何内容或数据不完整,损害用户体验

为避免这种情况,或在某种程度上解决它,您可以使用闪屏来阻挡尚未准备好显示的 ui 视图。您可以通过一个位于另一个之上的简单视图来执行此操作,并且可以从异步任务的 onPreExecuteonPostExecute 方法切换其可见性。

换句话说,修改您的布局,使其包含“加载”叠加层,并使其在加载时可见,完成后不可见,分别调用setVisibility(View.VISIBLE)setVisibility(View.GONE)

更新:

更新后,您唯一需要更改的是调用进度对话框的方式,更改为以下几行:

... //Inside your asyntask
ProgressDialog pDialog;
@Override
protected void onPreExecute(){
   pDialog = new ProgressDialog(YOURACTIVITY.this);
   pDialog.setMessage("Authenticating user...");
   pDialog.show();
}

如果您的 AsyncTask 与调用它的活动在同一个类中定义,否则您应该通过构造传递上下文,然后使用该上下文调用进度对话框:

Context mContext;
public MyTask(Context context) {
    mContext = context;
} 

然后使用mContext代替YOURACTIVITY.this作为前面代码的上下文。

【讨论】:

  • 这就是计划。我也尝试过显示 ProgressDialog,但我似乎无法正确处理。查看问题的编辑
  • 我通过将上下文传递给异步任务来找出 ProgressDialog 错误。感谢您提供有关如何解决我的问题的好答案
  • 我实际上只是用上下文问题更新了它,很高兴你明白了;)
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
相关资源
最近更新 更多