2012-02-24 3 views
1

Я пытаюсь разработать виджет с EditText (только для int) и KeyEvent. Проблема в том, когда нажата кнопка «0», она обнаруживает KeyEvent, но не записывает «0» в мой EditText. Он должен добавить числа, чтобы я их нажимал.setText на EditText с EventKey

et1.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (KeyEvent.ACTION_UP != event.getAction()) { 
      switch (keyCode) { 
       case KeyEvent.KEYCODE_0: 
        //Do something... 
        break; 
       default: 
        return false; 
      } 
     } 
     return true; 
    } 
}); 

Я попытался сделать что-то подобное, но это не так эффективно.

et1.setText(et1.getText().toString + "0"); 

Знаете ли вы какое-то решение?

+1

На всякий случай вы изобретаете колесо: 'android: inputType =" number "' см. Http://stackoverflow.com/questions/4645119/how-to-set-only-numeric-value-for-edittext- в-андроида. –

+0

Я использовал его в своем Activity.xml, но моя проблема в том, что когда я нажимаю клавишу, она не появляется в моем EditText, но она генерирует KeyEvent. Могу ли я сделать это одновременно? –

ответ

1

Позвольте мне попытаться сделать себе ясный Пеп:

1) Если то, что вы пытаетесь достичь, чтобы иметь EditText, что позволяет только целое (цифровой) вход, вы можете добавить атрибут, и S Это. Вам не нужен настраиваемый элемент управления для такого поведения.

android:inputType="number" 

2) Причина, почему вы не получаете любой вход в вашем EditText просто потому, что вы блокируете его, возвращая true в переопределен onKey методом.

ref говорит, onKey должен вернуться:

Правда, если слушатель потребил событие, ложь в противном случае.

Это означает, что если вы возвращаете true, вы отвечаете, Android обыкновению вход ничего в вашем EditText. Поскольку вы не делаете (по крайней мере, в коде, который вы предоставили), он сам, EditText не заполнен.

Итак, я предлагаю вам полностью удалить обработчик и добавить атрибут inputType в xml, как вы это делали раньше.


Update

Если вам нужно обновить EditText (назовем его EditText1) на основе ввода в другой (EditText2), я предлагаю отслеживать ввод в первом с TextWatcher и установите textEditText2 с обработанным значением.

Проверьте код this similar issue.

+0

Большое спасибо @Zortkun за ваш интерес. Я уже использую 'inputType' в' xml'. Я прошу об этом, потому что я хочу сделать виджет с двумя «EditText». По мере того как я помещаю числа в один «EditText», другой заполняется арифметическим преобразованием, поэтому я хочу сделать событие и заполнить его. –

+0

Эй. Спасибо, что приняли в качестве ответа, но я думаю, у вас есть другая проблема. Я буду обновлять и предлагать вам некоторые подходы. –

+0

Это именно то, что мне нужно! Большое спасибо! –

Смежные вопросы