У меня есть edittext, для которого требуется ввести целое число. Таким образом, я установил его, чтобы принять только входной тип «number» в XML-файле. В моем коде я использовал onEditorAction, чтобы прослушать нажатие кнопки «Готово». Это требование, чтобы оценка была «записана». Но по какой-либо причине каждый раз, когда «Done» нажимается на клавиатуре с цифрами, появляется клавиатура qwerty по умолчанию и фокусируется. Я должен нажать кнопку «назад», чтобы избавиться от нее!Регулярная клавиатура продолжает появляться после нажатия «Готово» на цифровой клавиатуре
Почему это происходит? Вот весь код, который манипулирует EditText:
От .xml:
<EditText
android:id="@+id/partial_score_entry"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:inputType="number"
android:hint="0" />
От пользовательского адаптера:
...
public View getView(int pos, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
if (v == null)
{
LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.score_list_row_2, null);
}
TextView subtaskView = (TextView)v.findViewById(R.id.subtask2);
TextView maxPointsView = (TextView)v.findViewById(R.id.max_points2);
final ScoringInfo scr = data.get(pos);
subtaskView.setText(scr.subtask);
maxPointsView.setText("Max Points: " + Integer.toString(scr.maxPoints));
final EditText manualScore = (EditText)v.findViewById(R.id.partial_score_entry);
manualScore.setTag(R.string.score, scr.maxPoints);
manualScore.setTag(R.string.subtask_num, scr.subtaskNum);
manualScore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
previous = Integer.parseInt(manualScore.getText().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
});
manualScore.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
scr.addToTotalPoints(-previous);
int max = Integer.parseInt(manualScore.getTag(R.string.score).toString());
int subNum = Integer.parseInt(manualScore.getTag(R.string.subtask_num).toString());
Challenge.subtaskScores.remove(subNum);
int tmpScore = 0;
if (!manualScore.getText().toString().equals("")) {
try {
tmpScore = Integer.parseInt(manualScore.getText().toString());
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(c, "Error: Maximum point allowance surpassed.", Toast.LENGTH_SHORT).show();
}
if (tmpScore > max){
Toast.makeText(c, "Error: Maximum point allowance surpassed.", Toast.LENGTH_SHORT).show();
manualScore.setText("");
}
else {
Challenge.subtaskScores.put(subNum, tmpScore);
scr.addToTotalPoints(tmpScore);
updatePoints(scr.getTotalPoints());
}
}
manualScore.clearFocus();
return true;
}
return false;
}
});
manualScore.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
if(hasFocus)
{
if(!manualScore.getText().toString().equals(""))
previous = Integer.parseInt(manualScore.getText().toString());
}
}
});
return v;
}
EDIT: Я установил выданная, добавив следующий код в onEditorAction метод в пределах блока if if:
InputMethodManager imm = (InputMethodManager)c.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(manualScore.getWindowToken(), 0);
В нем говорится, что INPUT_METHOD_SERVICE нельзя разрешить переменной. –
Хорошо, я попробовал это, используя оба контекста. и контекст, который я определил в этом пользовательском классе адаптера (c): InputMethodManager imm = (InputMethodManager) c.getSystemService (c.INPUT_METHOD_SERVICE); Это все еще не имеет значения. –
Извините за 3 комментария подряд, но я понял это. Я отредактирую в решении моего OP. Спасибо. Ваш код привел меня в правильном направлении, и я, наконец, понял, как это сделать. –