Очистка ранее введенного текста в поле EditText

#android #android-edittext

#Android #android-edittext

Вопрос:

Эй, я пытаюсь заставить мое окно EditText очистить его содержимое, когда либо: 1) Оно повторно выбрано для ввода других данных, либо 2) Нажата кнопка для ввода предопределенных данных

Это не текст подсказки. На данный момент, как только вводятся предопределенные данные, они остаются там, и я не могу их очистить, даже используя delete. Я попытался поместить EditBox.setText («») в прослушиватель onClick и addTextChangedListener (как в методах before, так и в on), используя логическое значение, чтобы определить, был ли код уже введен, но он просто игнорирует его.

 foodBox.addTextChangedListener(new TextWatcher(){

        @Override
        public void afterTextChanged(Editable s) {

        }
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            addFood();
            valueAdded=true;
        }           
    });


    dogButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (valueAdded==true){
                foodBox.setText("");
                setFood(0.0);
            }
            isClicked=true;
            animal=1;
            addFood();
            valueAdded=true;//value in the box
                }


    });


    catButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (valueAdded){
               foodBox.setText("");}
            isClicked=true;
            animal=2;
            addFood();
            valueAdded=true;
            }

    });
            private void addFood() {
    try{
        aClass aob = new aClass();
        setFood(0.0);
        String a = this.foodBox.getText().toString();
        if(isClickedamp;amp;TextUtils.isEmpty(a)){
            if(animal==1){
                a=mob.getDog(); 
            }
            if(animal==2){
                a=mob.getCat();
            }
            this.foodBox.setText(a);
            double d=Double.parseDouble(a);
            setFood(d);
        }else{
            if(TextUtils.isEmpty(a)){
            a="0";
        }
        double d=Double.parseDouble(a);
        setFood(d);
        }
    } 
        catch (Exception e){
        this.showAnswer.setText("Please input animals in numbers");
        addFood();
    }
}
  

Спасибо

Ответ №1:

Ошибка…

Единственный код, который я использую для достижения 1), это:

     // Clear text when clicked
    host.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            host.setText("");
        }
    });
  

host просто являющийся EditText. Работает просто отлично? Я думаю, вы делаете это сложнее, чем есть на самом деле.

Комментарии:

1. это очень странно. может ли это быть как-то связано с кодом в методе addFood?

2. Я бы не стал использовать прослушиватель TextChanged, особенно такой. Имеющаяся у вас переменная valueAdded кажется действительно глупой, вам следует вместо этого проверить что-то вроде foodBox.getText().length() , чтобы убедиться, что внутри поля EditText есть данные. Переосмыслите свой дизайн.

3. Хорошо, спасибо. Я учу себя множеству глупостей, которые происходят :/

4. Не беспокойтесь, извините, если я был слишком резок. 🙂

5. Нет, я просто рад получить помощь 🙂

Ответ №2:

Для очистки при нажатии кнопки Очистить:

 firstName = (EditText) findViewById(R.id.firstName);

clear = (Button) findViewById(R.id.clearsearchSubmit);

clear.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.clearsearchSubmit);
        firstName.setText("");
    }
});
  

У меня это сработало. Надеюсь, это поможет.

Ответ №3:

Для 1) onClick у меня не сработал, так как мне пришлось нажать дважды, чтобы вызвать OnClickListener. Другим подходом было бы setOnFocusChangeListener()

 editTextView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus){
                    editTextView.getText().clear();
                }
            }
        });
  

Для 2) решение, данное ashim888, работает хорошо.