如何一次又一次地调用相同的警报Dialog?

时间:2012-08-24 12:53:36

标签: android alert alertdialog

我创建了一个Alert Dialog,其中有两个EditText和两个Button,我获取EditText的值,如果值匹配,那么我正在做一些操作否则我想再次调用AlertDialog。但如果值不同,那么我无法调用相同的警报对话框。我不知道我在哪里做错了...

我的代码就像这样::

public class MainActivity extends Activity 
{
private Button btn_click;
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn_click=(Button)findViewById(R.id.btn_click);
    btn_click.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View arg0) 
        {
            showDialog(0);
        }
    });
}

@Override
protected Dialog onCreateDialog(int id) 
{
    switch (id) 
    {
    case 0:
        // This example shows how to add a custom layout to an AlertDialog
        android.app.AlertDialog.Builder login = new android.app.AlertDialog.Builder(this);

        try
        {

            LayoutInflater factory = LayoutInflater.from(this);
            final View textEntryView = factory.inflate(R.layout.login_dialog, null);

            final EditText username_alert = (EditText) textEntryView.findViewById(R.id.username);
            final EditText password_alert = (EditText) textEntryView.findViewById(R.id.password);

            login.setTitle("Login").setIcon(R.drawable.ic_launcher).setView(textEntryView)

            .setPositiveButton("Login", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int whichButton) 
                {
                    /* User clicked OK so do some stuff */
                    String uname_alert=username_alert.getText().toString();
                    String pass_alert=password_alert.getText().toString();

                    if(uname_alert.equals("aaaa") && pass_alert.equals("aaaa"))
                    {
                        //do Something........
                    }
                    else
                    {
                        showDialog(0);
                    }
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int whichButton) 
                {
                    /* User clicked cancel so do some stuff */
                }
            });
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return login.create();
    }
    return null;
}
  }
希望我的问题很明确....... 请帮我 .. 在此先感谢..... :)

5 个答案:

答案 0 :(得分:0)

在从对话框调用showDialog之前,你应该关闭现有的对话框吗?

答案 1 :(得分:0)

目前,您每次都在创建新对话框。

尝试将您创建的对话框保持为类级变量并重用它。喜欢:

第一次
    对话框= login.create();     返回对话框; 下次再开始     仅返回对话框

答案 2 :(得分:0)

我认为您正试图在AlertDialog内创建AlertDialog这是不可能的。相反,您可以使用Toast来显示提醒信息。

阅读这篇文章以了解自定义 AlertDialog

答案 3 :(得分:0)

问题在于操作顺序。在解除对话框之前,您的点击处理程序会调用showDialog(),因此该调用不执行任何操作。然后在处理程序方法返回后立即AlertDialog调用dismiss()自身(默认行为)并消失。

此功能的更好实现是自定义AlertDialog并在调用DialogInterface处理程序之前拦截按钮单击,这样您就可以进行验证,而不是在这种情况下根本不关闭对话框,而不是试图让它再次出现。事实是AlertDialog没有足够的能力处理这种情况,这里最好的解决方案是不要试图将方形钉固定到圆孔中,并且可能只做一个自定义的Dialog实现来完成所有事情你需要。

答案 4 :(得分:0)

我知道这个answare迟到了。但对于未来的寻求者。 我有同样的问题,没有.hide()。show()和.dismiss()的组合没有反应。可能系统需要一些时间,然后才能正常工作。

if (!SDCartConnected())
{
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable(){
            public void run() {
                showDialog(Const.DIALOG_SDCARD_MISSING);}}, 2000);  
}