Я пытаюсь получить кнопку, чтобы перейти к следующему занятию, если условия выполнены, но это не сработает. - PullRequest
0 голосов
/ 22 декабря 2018

Это код, который должен позволить мне перейти к следующему упражнению с 3 методами, которые я сделал.Метод checkEditText должен принять параметр editText и изменить его на строку, а затем убедиться, что он не пустой.checkTextLetters должен принимать параметр editText, а затем убедиться, что он содержит только буквы и / или пробелы.Тогда метод configureNextButton должен запускаться только в том случае, если 2 предыдущих метода верны:

private boolean checkEditText(EditText text){

    if(text.getText().toString().trim().length() > 0)
    {
        return true;
    }
    //try and print to screen "name is left blank//
    return false;
}

Я думаю, этот метод будет возвращать true всякий раз, когда я набираю asdf или что-то в простом тексте:

private boolean checkTextLetters(EditText text){
    String line = text.getText().toString();

    //checks to make sure that the string contains only the characters a-z and A-Z and/or spaces
    boolean checkChars = line.matches("[a-zA-Z]");
    boolean checkSpaces = line.matches("\\s+");
    if(checkChars && checkSpaces){
        return true;
    }
    else if(checkChars){
        return true;
    }
    return false;
}

Этот метод должен просто взять текст из набранного мною простого текста и убедиться, что он содержит только буквы и пробелы:

private void configureNextButton(boolean textCheck, boolean checkIfLetters){
    //create if statement to not activate button if editText is empty
    if(!textCheck || !checkIfLetters) {
        return;
    }

    //will create variable 'mainButton' from the id of 'button' on MainActivity
    Button mainButton = findViewById(R.id.button);
    //sets the 'mainButton' to respond to a click
    mainButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //states that when 'mainButton' is clicked, it begins Intent to switch to Main2Activity
            startActivity(new Intent(MainActivity.this, Main2Activity.class));
        }
    });
}

Это метод, в которомКнопка должна привести меня к следующему занятию.Я сохраняю метод 'checkEditText' и 'checkTextLetters' для логических переменных и передаю их в качестве параметров для этого метода, так что если они равны true, то код позволит кнопке перейти к следующему действию и, если любой из них будет false тогда он ничего не сделает:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    EditText editTextLines = findViewById(R.id.editText);
    //call method to use 'button' to go to next activity given all conditions are true
    boolean checkNotEmpty = checkEditText(editTextLines);
    boolean checkIfLetters = checkTextLetters(editTextLines);
    configureNextButton(checkNotEmpty,checkIfLetters);
}

Вот основной метод, где я собираю все это вместе и запускаю.Это будет работать, когда я просто установлю checkNotEmpty и checkIfLetters на true или false.Всякий раз, когда я пытаюсь объявить их значение путем вызова двух моих методов, кнопка ничего не делает.

Я изменил код и избавился от методов 'checkEditText' и 'CheckTextLetters' вместометод TextWatcher в основном методе.Это работает, но есть ошибки.1. Когда он запускается впервые, я могу нажать кнопку и перейти к следующему действию.2. Я могу ввести любую букву и цифры, но не буду принимать только цифры.Я хочу, чтобы EditText просто не работал, если он пуст, разрешал только буквы и пробелы

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    EditText editText = findViewById(R.id.editText);
    final Button button = findViewById(R.id.button);

    button.setClickable(false);
    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.toString().length() == 0)
                button.setClickable(false);
            else{
                String line = s.toString();
                boolean value = line.matches("[a-zA-Z]");
                // set bool 'value' to check for alphabet letters
                if(value)
                    button.setClickable(true);
            }


        }
    });

    //call method to use 'button' to go to next activity given all conditions are true
    configureNextButton();

1 Ответ

0 голосов
/ 22 декабря 2018

Я думаю, вам нужно использовать TextWatcher .

См. Пример кода: реализуйте его с помощью своей логики и измените существующую функцию, чтобы она принимала String вместо EditText.

    btnSubmit.setClickable(false);

    edtText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.toString().length() == 0){
                btnSubmit.setClickable(false);
            }
            else
            {
                //Validate if its Alphabets only - if returned true,
                boolean value = validateAlphabetsOnly(s.toString());
                if(value)
                {
                    btnSubmit.setClickable(true);
                }
            }
        }
    });

В onCreate активность только что создана.У пользователя еще нет шансов написать в EditText.Поэтому вам нужно будет использовать TextChangedListener для EditText.

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