如何在用户输入无效值时返回相同的警告对话框,然后单击确定?

时间:2012-02-17 03:21:05

标签: android alert

我正在使用AlertDialog用户登录应用程序。我已经显示了输入用户名和密码的两个编辑视图,并且我在警告对话框中使用了正按钮和负按钮。当用户输入无效时用户名或密码然后单击确定我在与TexView相同的警报对话框中显示文本,但警报对话框正在关闭。如何保持警报对话框,直到用户输入编辑文本字段的有效详细信息?

我已经实现了获取警报的代码,如下所示:

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Login here");
    alert.setView(table);
    alert.setPositiveButton("Login", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {

        objLogin.setLoginUsrName(userNameText.getText().toString());
        objLogin.setLoginPassword(passwordText.getText().toString());

        if(objLogin.userValid())
        {

          //getting next screen


        }
        else{
            invalid.setText("Invalid user name or password");
            invalid.setTextColor(Color.RED);

            //diaplay same alert here with invalid text

        }

      }
    });

    alert.setNegativeButton("Register", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {

                 //get register screen code here
      }
    });

    alert.show();              

如何在用户输入有效详细信息之前显示警报?

3 个答案:

答案 0 :(得分:1)

我认为问题是来自AlertDialog类的positiveButton和negativeButton。按下这些后,AlertDialog关闭。使用Dialog Builder而不是AlertDialog可能会更好运,但我还没有测试过。

另一个修复:

尝试将两个Android小部件添加到“表格”布局中,并在其上设置onclicklistener。这样做而不是AlertDialog中的两个默认正/负按钮。此方法还允许您修改按钮的位置和样式。

答案 1 :(得分:1)

使用以下布局

创建自定义对话框
    <?xml version="1.0" encoding="utf-8"?>
<TableLayout android:id="@+id/tableLayout1" android:gravity="center"
    android:layout_width="200dip" android:layout_height="150dip" 
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:gravity="center" >  

        <EditText android:text="" android:id="@+id/edusername"
            android:layout_width="80dip" android:layout_height="50dip" android:inputType="textPassword"
             android:singleLine="true" ></EditText>
    </TableRow>
<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:gravity="center" >  

        <EditText android:text="" android:id="@+id/edconfirmpwd"
            android:layout_width="80dip" android:layout_height="50dip" android:inputType="textPassword"
             android:singleLine="true" ></EditText>
    </TableRow>

    <TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:gravity="center" >

        <Button
            android:id="@+id/ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="15dip"
            android:padding="20dip"
            android:text="@string/BtnOk" >
</Button>

        <Button
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="15dip"
            android:padding="20dip"
            android:text="@string/cancelBtn" >
</Button>

    </TableRow>


</TableLayout>

在活动中使用

    final Dialog password = new Dialog(activity.this);
        password.setContentView(R.layout.dialog);
        password.setTitle("Enter your login ids");
                final EditText getUsername = (EditText)password.findViewById(R.id.edUsername);
        final EditText getPassword = (EditText) password
                .findViewById(R.id.edconfirmpwd);
        Button okButton = (Button) password.findViewById(R.id.ok);
        okButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                String password= getPassword.getText().toString();
String username = getUsername.getText().toString();

                if (password.equals("yourText")&& username.equals("yourtext")) {
password.dismiss();

                    }
                } else {
                    Toast.makeText(getBaseContext(), "InvalidPassword",
                            Toast.LENGTH_SHORT).show();
password.show();

                }





            }
        });
        Button cancelButton = (Button) password.findViewById(R.id.cancel);
        cancelButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Entered on cancel button clicked");

                password.dismiss();

            }
        });
        password.show();

    }

答案 2 :(得分:0)

您需要为包含两个按钮的AlertDialog创建自定义视图,并将这些按钮用于正面和负面。

但如果用户未登录,则将startActivityForResult调用到登录活动会更好。然后在onActivityResult中,如果用户没有放入任何内容(选择取消,或者按回键),然后完成第一个启动的活动。在您进行的登录活动中,按下按钮将是相同的,如果登录信息正确,则您将调用finish

我曾经在我的应用中使用AlertDialog进行登录。我现在使用上面提到的方法,我更喜欢它。