我的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,我建议你试试一个普通的对话框,用 构建器及其布局(由您制作的自定义)包括 进度条或装载或任何你需要的。这应该解决你的问题 问题
但是我想知道你的应用程序是否在不同的视图中使用ProgressDialog
那么这是使用自定义构建器执行此操作的最佳方法吗?
它阻碍了应用程序的一致性。而且,这是另一种方式。
答案 0 :(得分:5)
@ My God
你只有两步之遥。
onCreateDialog()
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
onStart()
@Override
public void onStart() {
super.onStart();
new BackgroundDataLoad().execute();
}
现在您在对话框创建后执行加载任务,现在您可以查看正在显示的进度对话框。
答案 1 :(得分:2)
在DialogFragment中将ProgressDialog放在前面的简单解决方案
只需将该代码粘贴到对话框片段中,它就不会影响您现有的代码
@Override
public void onResume() {
super.onResume();
if (pDialog.isShowing() && pDialog != null) {
pDialog.dismiss(); //dirty fix for bring progress dialog front
pDialog = new ProgressDialog(getActivity());
pDialog.setCancelable(false);
pDialog.setMessage("Loading...");
pDialog.show();
}
}
答案 2 :(得分:0)
我遇到了类似的问题,问题的根源是你在dialogFragment中创建了progressDialog。你应该做的是创建一个进度对话框,并在DialogFragment中的onCreateDialog中将其作为对话框引用传递。
类似的东西:
public class MyDialogFragment extends DialogFragment {
private ProgressDialog mProgress;
public static JoinContactLoaderFragment newInstance() {
JoinContactLoaderFragment fragment = new JoinContactLoaderFragment();
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mProgress = new ProgressDialog(getActivity());
mProgress.setMessage("Some text");
mProgress.setCancelable(true);
mProgress.setCanceledOnTouchOutside(false);
return mProgress;
}
}