警告对话框多次显示设备摇晃 Android
Alert Dialog shows multiple times On device shake Android
我正在创建一个应用程序,摇动设备时会显示一个警告对话框。我有一个常用的方法来显示我从另一种方法调用的对话框,以及当设备被摇动时(虽然不是同时)。因此,当我从其他方法调用显示对话框方法时,对话框会正确显示并消失。只有当从 onShake() 调用 show dislog 方法时,它才会显示两次,有时甚至更多。
这是我的代码:-
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 30);
date = cal.getTime();
timeString = sdf.format(date);
showDialog(timeString, "Confirm ");
if(alert!=null && !alert.isShowing())
{
alert.show();
}
}
public void showDialog(String timeString, String title)
{
builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
String timeString1 = timeString.split("T")[1];
builder.setMessage("Reaching at:"+" "+ timeString1+"?");
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
}
});
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
// Do nothing but close the dialog
new AddStatusTask().execute();
}
});
alert = builder.create();
}
private class AddStatusTask extends AsyncTask<Void, Void, String>
{
String AddedResult;
ProgressDialog pd;
//Get Value of accessToken
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(getActivity());
pd.setMessage("Updating..");
pd.show();
}
@Override
protected String doInBackground(Void... params)
{
// TODO Auto-generated method stub
//Some code;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
if(result.equalsIgnoreCase("Sorry"))
{
pd.dismiss();
Toast.makeText(getActivity(), "Could not update. Please try again.", Toast.LENGTH_LONG).show();
}
if(pd!=null &&pd.isShowing())
{
pd.setMessage("Updated");
pd.dismiss();
Toast.makeText(getActivity(), "Updated!", Toast.LENGTH_LONG).show();
}
}
}
多次显示很自然,要控制它,请使用布尔值并将其设置为 false 以进行初始化,当对话框显示时将其设置为 true,当它被关闭时再次将其设置为 false。至于每次要显示对话框时进行控制,请检查此布尔值以确保显示它的一个实例。
您好,我只是提供示例代码。请相应更改。
private boolean bool=true;
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
if(bool)
{
bool=false;
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 30);
date = cal.getTime();
timeString = sdf.format(date);
showDialog(timeString, "Confirm ");
if(alert!=null && !alert.isShowing())
{
alert.show();
}
}
}
对话工作完成后。为下一次摇动使布尔变量为真。如果您有任何疑问,请告诉我。
我正在创建一个应用程序,摇动设备时会显示一个警告对话框。我有一个常用的方法来显示我从另一种方法调用的对话框,以及当设备被摇动时(虽然不是同时)。因此,当我从其他方法调用显示对话框方法时,对话框会正确显示并消失。只有当从 onShake() 调用 show dislog 方法时,它才会显示两次,有时甚至更多。
这是我的代码:-
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 30);
date = cal.getTime();
timeString = sdf.format(date);
showDialog(timeString, "Confirm ");
if(alert!=null && !alert.isShowing())
{
alert.show();
}
}
public void showDialog(String timeString, String title)
{
builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
String timeString1 = timeString.split("T")[1];
builder.setMessage("Reaching at:"+" "+ timeString1+"?");
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
}
});
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
// Do nothing but close the dialog
new AddStatusTask().execute();
}
});
alert = builder.create();
}
private class AddStatusTask extends AsyncTask<Void, Void, String>
{
String AddedResult;
ProgressDialog pd;
//Get Value of accessToken
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(getActivity());
pd.setMessage("Updating..");
pd.show();
}
@Override
protected String doInBackground(Void... params)
{
// TODO Auto-generated method stub
//Some code;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
if(result.equalsIgnoreCase("Sorry"))
{
pd.dismiss();
Toast.makeText(getActivity(), "Could not update. Please try again.", Toast.LENGTH_LONG).show();
}
if(pd!=null &&pd.isShowing())
{
pd.setMessage("Updated");
pd.dismiss();
Toast.makeText(getActivity(), "Updated!", Toast.LENGTH_LONG).show();
}
}
}
多次显示很自然,要控制它,请使用布尔值并将其设置为 false 以进行初始化,当对话框显示时将其设置为 true,当它被关闭时再次将其设置为 false。至于每次要显示对话框时进行控制,请检查此布尔值以确保显示它的一个实例。
您好,我只是提供示例代码。请相应更改。
private boolean bool=true;
@Override
public void onShake(float force)
{
// TODO Auto-generated method stub
if(bool)
{
bool=false;
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 30);
date = cal.getTime();
timeString = sdf.format(date);
showDialog(timeString, "Confirm ");
if(alert!=null && !alert.isShowing())
{
alert.show();
}
}
}
对话工作完成后。为下一次摇动使布尔变量为真。如果您有任何疑问,请告诉我。