我有一个名为SpotDetails的活动,它是一个活动,它从xml中收集大量信息,然后将其显示给用户。
我的问题是,当应用程序下载数据并填充SpotDetails变量时,我最好显示进度对话框。当填充变量时,我想显示活动并填充TextView。
我怎么能做到这一点?
我现在拥有的实际上是两个在onCreate上启动的异步线程。这会为用户生成一个缓慢的UI,并且活动上的代码很多,实际上并不需要在那里。
更新:
PR。现在我没有显示任何我试图使用以下行实现ProgressDialog:
Progress Dialog pDialog = new ProgressDialog(spotDetails.getApplicationContext());
请注意,Async是另一个类而不是SpotDetails。
但是我得到了一个很长的例外:
StackOverflow不接受代码所以这里是: http://pastebin.com/AJqJFvMM
答案 0 :(得分:1)
如果我理解正确,您已经使用asyncTask
获取信息,这是一种可行的方法,您的担忧是在完成此过程之前,活动正在显示没有或不完整的数据,破坏用户体验。
为了避免这种情况,或者在某种程度上解决它,你可以使用一个阻止ui视图的启动画面,它还没有准备好被人看到。您可以通过一个基于另一个的简单视图来执行此操作,并且可以从异步任务的onPreExecute
和onPostExecute
方法切换其可见性。
换句话说,修改您的布局,使其包含“加载”叠加层,并在加载时使其可见,并在完成后通过分别调用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
作为上一代码的上下文。