下载数据后显示活动

时间:2014-02-28 16:17:34

标签: android asynchronous task

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

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

我怎么能做到这一点?

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

更新:

PR。现在我没有显示任何我试图使用以下行实现ProgressDialog:

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

请注意,Async是另一个类而不是SpotDetails。

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

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

1 个答案:

答案 0 :(得分: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;
} 

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