У меня есть 4 текстовых поля, которые автоматически вычисляют разницу введенного числа. Затем отобразится ответ на текстовое поле редактирования. Моя проблема в том, что первое мероприятие отлично работает. Но я не могу определить, почему второй-четвертый события не будут выполняться. Каждое текстовое поле редактирования должно работать независимо друг от друга. Значение, отредактируйте текст 1, когда фокус потерян, запустит расчет и остановится. Когда текст редактирования 2 потерял фокус, расчет будет выполняться и останавливаться. Есть ли способ заставить это работать?
Вот мой код
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.premix);
final EditText vw3 = (EditText) findViewById(R.id.editText3);
final EditText vw7 = (EditText) findViewById(R.id.editText4);
vw3.setOnFocusChangeListener(this);
vw7.setOnFocusChangeListener(this);
}
}
public void onFocusChange(View v, boolean hasFocus) {
DecimalFormat df2 = new DecimalFormat("##.#");
if ((v.getId() == R.id.editText3) && (hasFocus==false)){
EditText vw3 = (EditText) findViewById(R.id.editText3);
EditText vw2 = (EditText) findViewById(R.id.editText2);
float f1=0;
float f5=0;
f1=Float.parseFloat(vw3.getText().toString());
f5=(f1-100)*-1;
String str1 = String.valueOf(df2.format(f5));
vw2.setText(str1);
}
if ((v.getId() == R.id.editText7) && (hasFocus==false)){
EditText vw7 = (EditText) findViewById(R.id.editText7);
EditText vw8 = (EditText) findViewById(R.id.editText8);
float f2=0;
float f6=0;
f2=Float.parseFloat(vw7.getText().toString());
f6=(f2-100)*-1;
String str2 = String.valueOf(df2.format(f6));
vw8.setText(str2);
}
}
Кто-нибудь может мне с этим помочь?
Много дней проб и ошибок, и я нашел решение!
В разделе OnCreate вам нужно будет установить свои представления
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.premix);
EditText vw3 = (EditText) findViewById(R.id.editText3);
EditText vw7 = (EditText) findViewById(R.id.editText4);
vw3.setOnFocusChangeListener(this);
vw7.setOnFocusChangeListener(this);
}
Теперь вы слушаете изменение фокуса, делая это.
public void onFocusChange(View v, boolean hasFocus) {
if((v.getId() == R.id.editText7) && (hasFocus == false))
calc1();
if((v.getId() == R.id.editText10) && (hasFocus == false))
calc2();
затем отделить отдельную логику и предоставить публичную пустоту для расчетов.
public void calc1(){
//do something here
}
public void calc2(){
//do something here
}
Результатом этого является то, что другой текст редактирования будет действовать независимо друг от друга.
Дополнение: Если вы делаете это в пользовательской ViewGroup, вам необходимо реализовать View.OnFocusChangeListener.