Как получить множественную фокусировку, изменившую события прослушивателя

1

У меня есть 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);
     } 
 }

Кто-нибудь может мне с этим помочь?

Теги:
text
edit

1 ответ

0
Лучший ответ

Много дней проб и ошибок, и я нашел решение!

В разделе 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню