0

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

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.    
        }
     }
}
4

3 回答 3

1

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

 ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please
   wait...", true);  

和,

ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please
   wait...", true);  

这里, v.getRootView().getContext(); 指的是getData()方法中传入的View Object的上下文。

于 2012-06-20T10:13:58.597 回答
1

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

Context 的定义是(根据 android 开发者网站):

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

希望解释有所帮助。

于 2012-06-20T10:16:14.553 回答
0

这里的上下文是您调用进度对话框的活动的上下文。所以它应该是 YourActivity.this

于 2012-06-20T10:11:06.307 回答