0

我创建了一个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;
}
  }

希望我的问题很清楚......请帮助我..在此先感谢...... :)

4

5 回答 5

0

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

于 2012-08-24T13:08:46.573 回答
0

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

尝试将您创建一次的对话框保留到类级别变量并重用它。喜欢 :

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

于 2012-08-24T13:09:31.550 回答
0

我认为您正在尝试AlertDialogAlertDialog其中创建不可能的内容。您可以使用它Toast来显示警报消息。

阅读这篇文章的自定义 AlertDialog

于 2012-08-24T13:09:36.160 回答
0

问题是操作顺序。您的单击处理程序showDialog()在对话框关闭之前调用,因此该调用什么也不做。然后在处理程序方法返回后立即AlertDialog调用dismiss()自身(默认行为)并消失。

此功能的更好实现是在调用处理程序AlertDialog之前自定义和拦截按钮单击,DialogInterface以便您可以进行验证并且在这种情况下根本不关闭对话框,而不是试图让它重新出现。事实是AlertDialog没有很好的能力来处理这种情况,这里最好的解决方案是不要尝试将方钉安装到圆孔中,而可能只是做一个定制的Dialog实现来满足你的一切需求。

于 2012-08-24T13:19:23.590 回答
0

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

if (!SDCartConnected())
{
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable(){
            public void run() {
                showDialog(Const.DIALOG_SDCARD_MISSING);}}, 2000);  
}
于 2012-12-06T17:57:07.953 回答