首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProgressDialog故障

ProgressDialog故障
EN

Stack Overflow用户
提问于 2012-06-20 18:05:36
回答 3查看 244关注 0票数 0

我有一个用户选择的按钮,我弹出一个AlertDialog来确定或取消替换某些数据的操作。在我弄清楚这是一个ASYNCH过程后,OK和CANCEL工作得很好。我甚至停止了多次点击。但是,当用户按下OK时,我必须将信息和一些任务一起保存到内存中。OK过程大约需要三秒钟,这超出了不耐烦的人的极限。我想抛出一个带有消息的不确定进度条。然而,我对Java和android的新手阻碍了我的发展。下面代码中的“上下文”到底是什么?

代码语言:javascript
复制
public void getData(final View v)
{
     if(AlertDialogProcessing==0)
     {   
         final String title="Set Image to Wallpaper";
         final String message="Press OK to set as Wallpaper or CANCEL";
         final String ok="OK";
         final String cancel="CANCEL";
         final AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
         try{
              alertbox.setMessage(message);
              alertbox.setTitle(title);
              alertbox.setPositiveButton(ok,new DialogInterface.OnClickListener(){ 
                   public void onClick(DialogInterface arg0, int arg1)
                   {  
                        Vibrate(ClickVibrate); 
                        Drawable drawable= getSun(imageSelect);  
                        ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);   //<<<<<<<<<<ERROR at context
                        AlertDialogProcessing=1;     
                        SaveData(drawable,1);
                        AlertDialogProcessing=0;
                        dialog.dismiss();
                        Toast.makeText(getApplicationContext(), "Data Saved.",Toast.LENGTH_LONG).show();      
                   } 
              });

              alertbox.setNegativeButton(cancel,new DialogInterface.OnClickListener(){
                   public void onClick(DialogInterface arg0, int arg1){
                        AlertDialogProcessing=0; 
                        Vibrate(ClickVibrate); 
                   } 
              });
              //alertbox.setCanceledOnTouchOutside(false); // maybe a 4.0 problem
              alertbox.show();
        } catch(Exception e){   
              //TODO Handle BadTokenException.    
        }
     }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 18:16:15

onClick()中,您将创建一个progressDialog,并在UI线程上执行saveData()活动。您可以做的是在OnClick()中创建一个AsyncTask,在它的onPreExecute()中显示对话框,在doInBackground()中执行保存操作,在onPostExecute()中关闭对话框。

上下文的定义是(根据android开发人员站点):

有关应用程序环境的全局信息的

接口。这是一个抽象类,它的实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及向上调用应用程序级别的操作,如启动活动、广播和接收意图等。

希望这个解释能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 18:13:59

如果您在获取上下文时遇到问题,您可以简单地替换

代码语言:javascript
复制
 ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please
   wait...", true);  

使用,

代码语言:javascript
复制
ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please
   wait...", true);  

这里,v.getRootView().getContext();是指在getData()方法中传递的视图对象的上下文。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 18:11:06

这里的dialog.So是调用进度上下文的活动的上下文,它应该是YourActivity.this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11117204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档