我有一个用户选择的按钮,我将AlertDialog弹出为OK或CANCEL替换某些数据的操作。在我弄清楚它的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.
}
}
}
答案 0 :(得分:1)
如果您在获取上下文时遇到问题,可以直接替换,
ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please
wait...", true);
with,
ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please
wait...", true);
这里,v.getRootView()。getContext();指的是在getData()方法中传递的View Object的上下文。
答案 1 :(得分:1)
在您创建progressDialog的onClick()
中,您正在UI线程上执行saveData()
活动。您可以做的是在AsyncTask
中创建OnClick()
,并在其onPreExecute()
中显示对话框,在doInBackground()
和onPostExecute()
中解除执行保存操作对话框。
Context的定义是(根据android开发者网站):
有关应用程序环境的全局信息的接口。 这是一个抽象类,其实现由 Android系统。它允许访问特定于应用程序的资源和 类,以及应用程序级操作的上调,如 发起活动,广播和接收意图等。
希望解释有所帮助。
答案 2 :(得分:0)
此处上下文是您调用进度对话框的活动的上下文。所以它应该是YourActivity.this