首页 > 解决方案 > 进度对话框永远不会出现

问题描述

我试图在单击列表项时显示进度对话框,但进度对话框从未出现。

令人惊讶的是,mProgressdialog.isShowing() 是真的。如果有人遇到过类似的问题,请提供一些对该问题的见解。

adapter.setOnItemClickListener(new Adapter.ListClickListener() {
                        @Override
                        public void onItemClick(int position, View v) {



                                    //Some computations done.

                                    if (ProjectsFragment.this.getActivity() != null) {

                                        UniversalProgressDialog.showSimpleProgressDialog(getActivity(),"Loading","Loading...",false);

          android.support.v4.app.FragmentManager fragmentManager = ProjectsFragment.this.getActivity().getSupportFragmentManager();
                    android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
                    ft.replace(R.id.sample_content_fragment, new AgendaFragment(), "AGENDA");
                    ft.commit();



                                    }
                                }
                            }
                        }
                        });

UniversalProgressDialog 的源代码:-

    public class UniversalProgressDialog {

        private static ProgressDialog mProgressDialog;


        public static void showSimpleProgressDialog(Context context, String title,
                                                    String msg, boolean isCancelable) {
            try {
                if (mProgressDialog == null) {
                    mProgressDialog = ProgressDialog.show(context, title, msg);
                    mProgressDialog.setCancelable(false);
                    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                    mProgressDialog.setIndeterminate(true);
                    mProgressDialog.setCanceledOnTouchOutside(false);
                }

                if(mProgressDialog.isShowing()){
                    mProgressDialog.dismiss();
                }

                if (!mProgressDialog.isShowing()) {
                    mProgressDialog.show();
                }

            } catch (IllegalArgumentException ie) {
                ie.printStackTrace();
            } catch (RuntimeException re) {
                re.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public static void removeSimpleProgressDialog() {
            try {
                if (mProgressDialog != null) {
                    if (mProgressDialog.isShowing()) {
                        mProgressDialog.dismiss();
                        mProgressDialog = null;
                    }
                }
            } catch (IllegalArgumentException ie) {
                ie.printStackTrace();

            } catch (RuntimeException re) {
                re.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }


    }

我尝试了什么?

尝试将显示代码的进度对话框移动到

尝试将片段转换代码移动到另一个线程,如下所示:-

 private class PerformFragmentTransition extends Thread {


        public PerformFragmentTransition() {
        }

        @Override
        public void run() {

            android.support.v4.app.FragmentManager fragmentManager = ProjectsFragment.this.getActivity().getSupportFragmentManager();
            android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
            ft.replace(R.id.sample_content_fragment, new AgendaFragment(), "AGENDA");
            ft.commit();
        }
    }

还尝试过:-

getActivity().runOnUiThread(new Runnable(){
                                public void run() {
                                    UniversalProgressDialog.showSimpleProgressDialog(getActivity(),"Loading","Loading...",false);

                                }
                            });

还尝试过:-

根据其中一条评论,我注释掉了片段转换代码并显示了进度对话框。

如果这能提供一些关于如何解决问题的线索,以及更多信息:- 我将在加载后关闭下一个片段中的进度对话框。

标签: androidfragmentprogressdialog

解决方案


mProgressDialog = ProgressDialog.show(context, title, msg);

用下面的代码替换上面的代码:

 mProgressDialog = new ProgressDialog(context);
        mProgressDialog.setTitle(title);
        mProgressDialog.setMessage(msg);

问题是您在设置所需属性之前在代码中创建对话框时显示对话框。并且请删除 try catch 块,这样您就会得到实际发生的错误。并且可以在控制台中看到


推荐阅读