在我的Android应用程序中,第一个活动调用REST API以使用凭据获取项目列表。现在点击任何项目,传递项目ID并使用intent调用第二个活动。第二个活动使用传递id调用REST API,并显示该id的子项列表。
我在第一个活动中使用Progress Dialog。这工作正常。我希望此进度对话框也在第二个活动中继续,直到子项目列表不显示。
当第二个活动开始时,当前进度对话框消失,并且在子列表未获取之前出现空白屏幕。
任何人都可以指导我如何在第二个活动中继续进度对话框并在子列表出现时解除。
答案 0 :(得分:2)
这是一个黑客:
在ActivityA.java中,将ProgressDialog pd声明为静态
public static ProgressDialog pd;
在ActivityB.java中使用对ActivityA.pd
的静态引用,然后使用下面的代码。
if (ActivityA.pd != null) {
if (ActivityA.pd.isShowing()) {
ActivityA.pd.dismiss();
}
else {
Log.e(Vars.TAG, "It is NOT SHOWING");
}
}
答案 1 :(得分:1)
您应该使用AsyncTask
class FetchTask extends AsyncTask<Object, Object, Object>
{
ProgressDialog progress;
@Override
protected void onPreExecute()
{
super.onPreExecute();
progress=ProgressDialog.show(Context, "", "Loading...");
}
@Override
protected Object doInBackground(Object... params)
{
// fetch your data here
return null;
}
@Override
protected void onPostExecute(Object result)
{
super.onPostExecute(result);
progress.dismiss();
}
}
然后,您可以在onCreate
中执行此任务
new FetchTask().execute();
答案 2 :(得分:0)
您可以使用两种方法:
Activity
被解除后停止对话,然后在第二个onCreate
的{{1}}方法中再次显示该对话框。正如AkashG在评论中提到的那样。Activity
期间显示对话框,则可以使用一个Activity
代替两个Activity
并更改要使用的Activity
的布局第二个Activity
的布局,而不是调用另一个Activity
。但是,这可能很复杂,因为您将两个Activities
的功能集合到一个。{/ li>
醇>
答案 3 :(得分:0)
这是第二项活动onCreate上答案显示对话框的唯一解决方案
如你所说 - 进度对话框在第二个活动开始时消失,并且在子列表未获取之前出现空白屏幕。解决方案可以是当列表中的数据完全设置时解除对话框我的意思是在将适配器设置为列表你可以解雇对话框,它不会显示空白屏幕。
答案 4 :(得分:0)
我宁愿在您的情况下使用片段(如果需要,还可以使用支持库)。 然后将这两个活动更改为片段,并在(父)活动上创建showProgressDialog和hideProgressDialog方法。 进度对话框将始终可见,因为它处于相同的活动中,但片段将具有完全分离的逻辑,与活动相同。
答案 5 :(得分:0)
如果您将其作为2项活动。最好的方法是在第二个活动中也有进度对话框。因为一旦你的第二个活动开始,第一个活动就会转到后台。你不能指望第一个活动的进度对话框仍然可见,因为它有移动到最后。最好的方法是在第二个活动中有一个进度对话框,并在您尝试检索子列表时显示。在填充子列表UI后,关闭进度对话框。