gpt4 book ai didi

android - 关闭android中的进度对话框

转载 作者:行者123 更新时间:2023-11-30 04:50:08 26 4
gpt4 key购买 nike

在我的 android 应用程序中,我正在使用视频 View 播放视频。在下载视频时,我会显示一个进度对话框。

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

但如果有任何错误消息,并且一旦用户单击“确定”并返回到视频播放器,我想关闭此对话

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

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;
}

请分享您的宝贵建议。

提前致谢

最佳答案

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

onProgressUpdate 

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

编辑:

代码显示你使用runnable接口(interface)来实现线程,这对基本的java开发是有好处的。但是android sdk有一个专门针对android开发的解决方案,叫做async task。推荐使用。

例如您可以在 oncreate 方法所在的主 java 文件中添加一个私有(private)类。

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

}

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

Progress:后台计算时发布的进度单位类型。

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

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

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

-> 在后台计算开始之前调用

-> 进行一些设置(例如,显示进度对话框)

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

-> onPreExecute() 之后立即调用

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

->使用publishProgress(Progress...)触发UI更新进度

-> 进度将传递给 onProgressUpdate(Progress...)

onProgressUpdate(Progress...) - 在 UI 线程上调用

->更新进度

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

->后台计算完成后调用

-> 结果将从 doInBackground(Params...) 传递

如何启动AsyncTask?

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

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

关于android - 关闭android中的进度对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com