#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, работает хорошо.