我正在关注ApiDemos中的进度对话框示例.一切都很好 - 除了一件事 - 我想删除栏下面出现的数字(运行从0到.getMax()的数字.
找不到怎么做.
任何人?
大利
在我的应用程序中,我正在AsyncTask按照Android教程的建议进行一些紧张的工作,并ProgressDialog在我的主要活动中显示:
dialog = ProgressDialog.show(MyActivity.this, "title", "text");
new MyTask().execute(request);
Run Code Online (Sandbox Code Playgroud)
之后MyTask我将结果发回活动:
class MyTask extends AsyncTask<Request, Void, Result> {
@Override protected Result doInBackground(Request... params) {
// do some intense work here and return result
}
@Override protected void onPostExecute(Result res) {
postResult(res);
}
}
Run Code Online (Sandbox Code Playgroud)
在结果发布时,在主要活动中我隐藏了对话框:
protected void postResult( Result res ) {
dialog.dismiss();
// do something more here with result...
}
Run Code Online (Sandbox Code Playgroud)
所以一切都在这里工作正常,但我想以某种方式更新进度对话框,以便能够向用户显示一些真正的进展,而不仅仅是假的"请稍候......"消息.我可以以某种方式访问进度对话框MyTask.doInBackground,完成所有工作吗?
据我所知,它是作为单独的线程运行的,所以我无法与那里的主要活动"交谈",这就是为什么我用它onPostExecute来将结果推回到它.但问题是onPostExecute只有当所有工作都已完成时才调用,我想在做某事的过程中更新对话框的进度.
任何提示如何做到这一点?
我有一个基于列表选择ListActivity启动另一个Activity.第二个Activity需要从互联网上加载相当数量的数据,因此在用户点击项目和Activity显示时间之间存在明显的延迟.
这是一个问题,因为我目前无法向用户表明他们的点击正在被处理(即使只是更改所选列表项的颜色就足够了,但我找不到一个好方法).理想情况下,我可以ProgressDialog在第二个Activity加载时显示不确定的信息.
我已经为此尝试了一些不同的方法,但似乎没有任何工作.
我尝试过以下方法:
AsyncTask中检索可序列化数据(不是全部而是部分)Activity,并将其作为额外的数据传递给第二个.这并没有真正起作用,因为ProgressDialog我创建的onPreExecute()并没有立即显示(doInBackground()由于某些原因,它似乎延迟了处理.)这是代码:
AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
Dialog progress;
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(SearchActivity.this,
"Loading data", "Please wait...");
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
DatasetReader reader = new DatasetReader();
reader.setFundID(params[0]);
reader.addDatsets(FundProfile.datasets);
reader.populate();
return reader.toString();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progress.dismiss();
} …Run Code Online (Sandbox Code Playgroud) 我试图用来AsyncTask加载一个确定长度的文件.我AsyncTask看起来像这样:
protected void onPreExecute() {
dialog = ProgressDialog.show(MyActivity.this, null, "Loading", false);
}
protected void onProgressUpdate(Integer... values) {
if (values.length == 2) {
dialog.setProgress(values[0]);
dialog.setMax(values[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的doInBackground()实现中,我publishProgress(bytesSoFar, maxBytes);在我的加载循环和onPostExecute()我的调用中调用dialog.dismiss().
但是,ProgressDialog除了一个不确定的微调器之外,我无法展示任何东西.我想看到一个水平进度条,显示加载发生时的进度.我已经调试过,可以看到onProgressUpdate()用健全的值调用它,并且调用对话框的方法.
我ProgressDialog在我的应用程序中使用自定义,我能够自定义,但我也想删除上边框或窗口progressDialog.在styles.xml我定义customDialog为
<style name="AppTheme" parent="android:Theme.Light" />
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">#7BC047</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:windowBackground">@null</item>
<item name="android:windowFrame">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
为了删除父窗口我设置windowBackground为null和windowFramenull但它不适合我.目前,我的自定义进度对话框在下面给出的图像中看起来像
我正在使用此代码来设置样式progressDialog.
private void showProgressDialog() {
progressDialog = new ProgressDialog(this,R.style.CustomDialog);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Logging in. Please wait.");
progressDialog.show();
}
Run Code Online (Sandbox Code Playgroud)
所以,帮助我解决这个问题应该非常感谢任何帮助.
我ProgressDialog在onPreExecuteAsyncTask对象的方法中显示a 并取消onPostExecute方法中的ProgressDialog .在doInBackground方法中,我正在为用户注册发出HTTP请求.我希望允许更改屏幕方向.当我在doInBackground方法仍在运行时更改方向时,我会收到各种有趣的错误,例如'IllegalArgumentException:View not attached to window manager'和'RegisterScreen has leaked window ...'
如何ProgressDialog在方向改变后正确地继续显示?或者,在用户请求提交注册后,如何禁用方向更改?
在我的Android应用程序中,我使用AsynTask with Progress Dialog(请等待登录...)用于使用我的网页登录用户(AsynTask内的Web服务功能)
我想在用户点击设备上的后退按钮时解除进度对话框并取消AsynTask.
我无法找到那种中断AsynTask的例子.我读了abouth cancel(boolean)但我不知道如何从UI调用.
任何人都可以给我一些想法
谢谢
可能重复:
AsyncTask阻止UI威胁并显示延迟的进度条
我想在从任何服务器检索JSON时显示progressDialog.所以我使用AsyncTask作为解决方案(不确定任何不同的出路).
一切都很好,ProgressDialog正常工作,直到我使用AsyncTask实例调用.get()方法.我想它会以某种方式阻止UI.这是我的AsyncTask:
public class myAsync extends AsyncTask<String, String, List> {
String message; // for dialog message
ProgressDialog progress;
Intent myIntent;
Context ctx;
public myAsync(String message, Context ctx) {
this.message = message;
this.ctx = ctx;
progress = new ProgressDialog(ctx);
}
@Override
protected void onPreExecute() {
progress.setMessage(message);
progress.setIndeterminate(true);
progress.setCancelable(false);
progress.show();
}
@Override
protected List doInBackground(String... params) {
//returns any list after the task
return anyList;
}
@Override
protected void onPostExecute(List result) {
if(progress.isShowing())
progress.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
这里是调用AsyncTask的myActivity:
myAsync asyncTask = …Run Code Online (Sandbox Code Playgroud) 一个愚蠢的问题,但我真的无法让它工作:我在Swing应用程序中有一些长时间运行的过程可能需要几分钟.我希望在此过程正在进行时向用户显示进度对话框.我还想阻止用户执行进一步的操作,例如在进行过程中按下按钮.
如果我在EDT上执行此过程,这显然会阻止最终用户在进程中执行任何操作.但是因为EDT正在忙于处理,所以它永远无法渲染对话框的内容,因此我只是得到了对话框的轮廓.
但是如果我在工作线程中执行该过程,最终用户可以单击按钮并使EDT操纵工作者同时也在操作的状态,结果是坏事.如果我创建对话框模态,那不会发生,但Swing中的模态也意味着阻塞,所以在我调用的那一刻setVisible(true),线程永远阻塞.
所以我当前的"解决方案"是使用一个工作线程,然后产生一个单独的线程,其唯一目的是吸收阻塞性质setVisible.肯定有一个更好的解决方案!
那么我如何得到一个对话框,阻止用户与系统的其余部分(模态)交互,但不阻止导致它可见的线程?
我ProgressDialog在线程中使用了a .在onButtonClick线程启动时,但当我触摸屏幕上的任何地方时,它ProgressDialog都会关闭.
我怎么能阻止这个?
private void ButtonClick(View view) {
btn1 = (Button) view.findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
GetStudentData();
}
});
}
private synchronized void GetStudentData() {
try {
// Thread to display loader
new Thread() {
@Override
public void run() {
Looper.prepare();
dialog = Msg.ShowProgressDialogBox(
getActivity(),
dialog,
"Please wait while we fetch the student data...");
Looper.loop();
}
}.start();
new Thread() {
@Override
public void run() {
String studentData="Kailas";
}
}
} …Run Code Online (Sandbox Code Playgroud)