在android中关闭进度对话框

时间:2010-09-20 04:31:37

标签: android streaming

在我的Android应用程序中,我正在使用视频视频播放视频。当视频下载时,我正在显示进度对话框。

有时不支持流式传输或出现错误时,屏幕上会显示错误消息。单击错误消息后,进度对话框会再次显示该消息并尝试下载。

但是如果有任何错误消息,并且只要用户点击“确定”并返回视频播放器,我就会拒绝此对话

以便用户可以浏览下一个或上一个视频。

private ProgressDialog mProgressDialog;
Handler myUiHandler = new Handler();
         boolean m_prgisShowing = false;
         private static final int DIALOG_100 = 0;
        ProgressDialog mDialog2;

     mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    public void onPrepared(MediaPlayer mp) {
                        Log.i("Manju", "OnPrepared");
                        myUiHandler.post(myDilgDismis);
                        mVideoView.start();



        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_100: {
                mDialog2 = new ProgressDialog(this);
                mDialog2.setMessage("buffering...");
                mDialog2.setIndeterminate(true);
                mDialog2.setCancelable(true);

                return mDialog2;
            }
            }
            return null;
        }



        Runnable myDilgShow = new Runnable() {
            public void run() {
                show_My_Dialog();
            }
        };
        Runnable myDilgDismis = new Runnable() {
            public void run() {
                dismiss_My_Dialog();
            }
        };

        public void show_My_Dialog() {
            m_prgisShowing = true;
            showDialog(DIALOG_100);
        }

        public void dismiss_My_Dialog() {
            if (m_prgisShowing) {

                try {
                    if (null != mDialog2) {
                        mDialog2.dismiss();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    m_prgisShowing = false;
                }
            }
            m_prgisShowing = false;
        }

请分享您宝贵的建议。

提前致谢

1 个答案:

答案 0 :(得分:1)

我假设您使用AsyncTask进行线程处理,在本例中是用于流式传输或下载。然后你实现了

onProgressUpdate 

功能。在此功能中,您将更新进度对话框以显示当前的流状态。要关闭进度对话框,您必须将其可见性设置为false或将其从布局中完全删除。在onProgressUpdate中,您需要一个if语句或类似的东西来捕获错误并关闭对话框。

编辑:

代码显示您使用runnable接口来实现线程,这对于基本的Java开发很有用。但是android sdk有一个特别针对Android开发的解决方案叫做异步任务。建议使用它。

E.g。您可以将一个私有类添加到oncreate方法所在的主java文件中。

private class MediaPlayer extends AsyncTask<Params, Progress, Result> {

}

一个。参数:执行时发送给任务的参数类型。

湾进度:后台计算期间发布的进度单元的类型。

℃。结果:后台计算结果的类型。

每个异步任务都实现以下方法。 AsyncTask将经历的4个步骤:

一个。 onPreExecute() - 立即在UI线程上调用

- &GT;在后台计算开始之前调用

- &GT;做一些设置(例如,显示进度对话框)

doInBackground(Params ...) - 在后台线程上调用

- &GT;在onPreExecute()

之后立即调用

- &GT;在后台线程中执行可能需要很长时间的计算。

- &GT;使用 publishProgress(进度...)来触发UI更新进度

- &GT;进度将传递给onProgressUpdate(Progress ...)

℃。 onProgressUpdate(进度...) - 在UI线程上调用

- &GT;更新进度

d。 onPostExecute(Result) - 在UI线程上调用

- &GT;在后台计算完成后调用

- &GT;结果将从doInBackground(Params ...)

传递

如何启动AsyncTask?

new MyTask().execute(param1, param2, param3);

这是一个小概述。我强烈建议你阅读文档。