Как вернуть то же диалоговое окно с предупреждением, когда пользователь ввел недопустимые значения, а затем нажмите ОК - PullRequest
0 голосов
/ 17 февраля 2012

Я работаю с 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 ]

1 голос
/ 17 февраля 2012

Я думаю, что проблема заключается в positiveButton и absoluteButton из класса AlertDialog.AlertDialog закрывается после нажатия этих.Возможно, вам повезет больше с Dialog Builder вместо AlertDialog, но я этого не проверял.

Еще одно исправление:

Попробуйте добавить два виджета Android в макет «таблицы» и установить для них onclicklistener.Сделайте это вместо двух положительных / отрицательных кнопок по умолчанию из AlertDialog.Этот подход также позволит вам изменить расположение и стиль кнопок.

1 голос
/ 17 февраля 2012

создайте пользовательский диалог, используя следующий макет

    <?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();

    }
0 голосов
/ 17 февраля 2012

Вам необходимо создать пользовательское представление для AlertDialog, содержащее две кнопки, и использовать эти кнопки для положительных и отрицательных значений.

Но гораздо лучше было бы позвонить startActivityForResult для входадействие, если пользователь не вошел в систему. Затем в onActivityResult, если пользователь ничего не вставил (решил отменить или нажать клавишу возврата), просто завершите первое запущенное действие.А при входе в систему, который вы выполняете, нажатия кнопок будут такими же, и если информация для входа верна, вы будете звонить finish.

Я использовал AlertDialog в своем приложениидля входаСейчас я использую метод, который я изложил выше, и мне это нравится намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...