【发布时间】:2014-08-12 12:47:55
【问题描述】:
我的ProgressDialog 没有显示 - 它是在 AsyncTask 类 BackgroundDataLoad 中定义的。
DialoguePopup 类 -
public class DialoguePopup extends DialogFragment {
public DialoguePopup newInstace()
{
DialoguePopup dialogFragment = new DialoguePopup();
return dialogFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
//view related code..
//Calculation logic data load in background
new BackgroundDataLoad().execute();
return view;
}
class BackgroundDataLoad extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Calculating ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... params)
{
//Data that can take 8 seconds to load is in background process
return null;
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
pDialog.dismiss();
}
注意:
经过更多调试,我知道我的 ProgressDialog 显示在 DialogFragment 下方,但我希望它位于 DialogFragment 之上。
SO 帖子How can I open a ProgressDialog on top of a DialogFragment? 提到,
显然这是一个被广泛抱怨的主题 ProgressDialog,我建议你尝试一个普通的对话框,用 builder 并且其布局(由您定制的)包括 进度条或加载或任何你需要的。这应该解决你的 问题。
但我想知道您的应用程序是否在不同的视图中始终使用ProgressDialog,那么这是使用自定义生成器的最佳方式吗?
它会妨碍您的应用程序的一致性。而且,那是另一种方式。
【问题讨论】:
-
pDialog 的声明在哪里?是在活动吗?
-
您在
DialoguePopup中扩展DialogFragment。没有Activity Context -
@Paritosh - 见上面的代码。它在
AsyncTask的onPreExecute()方法中声明。 -
@PRAKASHUBHADIYA - 我的
DialogFragment已附加到一个活动,所以我正在做getActivity()以获取context。如果它不存在,我应该在getActivity()调用时得到空指针异常。 -
@VedPrakash 我问的是声明,而不是定义。如果它在活动中声明,我们必须获取它的实例。
标签: android progressdialog android-dialogfragment