Java “中的声明”;“如果块”;在函数之前执行;如果条件是“;返回
我用Android编写了下面的代码。“confirmalert”功能实际上显示一个警报框,并具有正按钮和负按钮 但“其他”部分总是有效的,即使我没有选择任何东西 请回复如何使其正常工作Java “中的声明”;“如果块”;在函数之前执行;如果条件是“;返回,java,android,android-asynctask,Java,Android,Android Asynctask,我用Android编写了下面的代码。“confirmalert”功能实际上显示一个警报框,并具有正按钮和负按钮 但“其他”部分总是有效的,即使我没有选择任何东西 请回复如何使其正常工作 private void updatestockin() { if(confirmalert()) { Toast t = Toast.makeText(getApplicationContext(), "Success", Toast.LEN
private void updatestockin()
{
if(confirmalert())
{
Toast t = Toast.makeText(getApplicationContext(), "Success",
Toast.LENGTH_SHORT);
t.show();
}
else
{
Toast t = Toast.makeText(getApplicationContext(), "User Rejected", Toast.LENGTH_SHORT);
t.show();
}
}
我的confirmalert
功能:
public boolean confirmalert(String title,String msg)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(msg);
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=true;
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=false;
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
return flag;
}
confirmalert()方法立即返回(在AlertDialog显示在屏幕上之前)带有标志字段的值,如果在类中没有其他设置,则该字段为false。这是因为AlertDialog.show()是异步的,否则它将阻止主(ui)线程,并且在调用应用程序后,您将无法再与它交互
您需要做的是将调用移动到confirmalert()方法之外的updatestockin()方法,并从对话框中调用updatestockin.OnClickListener()
我认为存在异步问题。因此,可能这个警报在不同的线程中。因此,由于您的标志初始化为false,它将运行该标志 因此,使用wait()和notify()可以同步线程 试试这个:
public boolean confirmalert(String title,String msg)
{
wait();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(msg);
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=true;
notify();
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=false;
notify();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
wait();
return flag;
}
它应该会起作用。没有测试。如果可能,请阅读关于等待和通知的内容,以便正确理解,希望它能引导您找到正确的路径。
confirmalert
没有阻塞,因此,如果条件没有参数,则始终会立即返回true您正在调用的函数confirmalert。是调用不同的函数吗?OnClickListener
是用户单击按钮时运行的代码的放置位置。将要运行的代码移动到相应的onClick
方法中。@Shuddh,我已经删除了它,这样你们就可以轻松理解代码了。代码实际上正在运行。但问题是,在我在alertbox中选择任何内容之前,else部分就开始工作了。@AKSW我没有理解您的意思。你能解释一下吗?我不是在寻找替代品。我需要让主体部分等到方法完成
public boolean confirmalert(String title,String msg)
{
wait();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(msg);
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=true;
notify();
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
flag=false;
notify();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
wait();
return flag;
}