1

Вот мой код:EditText setOnKeyListener не работает, когда значение изменяется

private EditText EditHal; 
.... 
.... 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
layout = convertView; 
if (convertView == null) { 
    layout = inflater.inflate(R.layout.my_fragment, null); 
} 
EditHal = (EditText) layout.findViewById(R.id.input_hal); 
EditHal.setClickable(true); 
EditHal.setFocusableInTouchMode(true); 
.... 
EditHal.setText("" + 1, TextView.BufferType.EDITABLE); //hardcoded at Here 
EditHal.requestFocus(); 
EditHal.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
     (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      Toast.makeText(getActivity(), EditHal.getText(), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    return false; 
    } 
}); 
return layout; 
} 

А вот XML макета my_fragment:

.... 
    <EditText 
     android:id="@+id/input_hal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:ems="10" 
     android:inputType="numberDecimal" 
     android:hint="@string/hal" 
     android:maxLength="3" 
     android:clickable="true" 
     android:textColor="@color/white" 
     android:singleLine="true" 
     android:textSize="14sp" > 
     <requestFocus /> 
    </EditText> 

Вопрос:

на код выше, (EditText) Значение EditHal равно «1». Но если я изменяю значение EditHal на другой номер, а затем нажимаю клавишу Enter/Done на клавиатуре, значение EditHal все равно «1», никаких изменений вообще не происходит.

Я хочу, чтобы каждый раз, когда я меняю значение внутри поля EditHal, и я нажимаю Enter/Done Key, Toast покажет номер, который у меня есть. Пожалуйста, скажите мне, как его решить. Благодаря

редактируется (Раскрыты):

I изменяет код выше с этим:

//private EditText EditHal; 
.... 
.... 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
layout = convertView; 
if (convertView == null) { 
    layout = inflater.inflate(R.layout.my_fragment, null); 
} 

//final added at EditText 
final EditText EditHal = (EditText) layout.findViewById(R.id.input_hal); 

EditHal.setClickable(true); 
EditHal.setFocusableInTouchMode(true); 
.... 
EditHal.setText("" + 1, TextView.BufferType.EDITABLE); //hardcoded at Here 
EditHal.requestFocus(); 
EditHal.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
     (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      Toast.makeText(getActivity(), EditHal.getText(), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    return false; 
    } 
}); 
return layout; 
} 

и проблема исчезла. Спасибо, Жан Ян.

+0

использовать эту ссылку для получения значения при нажатии ввода или сделать http://stackoverflow.com/questions/8063439/android-edittext-finished-typing-event –

ответ

1

Это потому, что EditText не знает, заканчивает ли пользователь печатать или нет.

Например, вы можете добавить android:singleLine="true" своего EditText в xml-файл.

Когда вы нажмете ENTER, клавиатура автоматически закроется и появится тост. Android считает, что вы закончили печатать и закрывать клавиатуру для вас; в противном случае, если вы разрешаете многострочный, Android ловит ENTER KEY в качестве новой строки/разрыва строки.

EDIT

Добавить toString метод после getText

Toast.makeText(getActivity(), EditHal.getText().toString(), Toast.LENGTH_SHORT).show(); 

И поскольку EditHal осуществляется доступ в внутренний класс, объявить EditHal как final переменной.

final EditText EditHal = (EditText) findViewById(R.id.input_hal); 
+0

до сих пор не работает. Я просто обновил свой вопрос (добавлен файл xml). Пожалуйста помоги. – wdyz

+0

Вы использовали специальную клавиатуру ввода? , например, я использую ввод HTC, он не будет «отправлять» то, что вы набираете, в EditText, пока не нажмете его предложение или не нажмете ENTER. Это значит, вам нужно дважды щелкнуть мышью. – Erwai

+0

Я запускаю код на своем Android-телефоне (5.0) с помощью SDK 23. Все в порядке. – Erwai

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