Это предназначено для обнаружения, когда пользователь нажал пробел после ввода буквы A. Если пробел нажат, A следует заменить на C. В противном случае его следует оставить в покое.
Кроме того, если пользователь нажимает пробел, а затем нажимает клавишу Backspace, замененная буква (C) должна стать буквой A и больше не должна заменяться. В основном слабая система автокоррекции.
Моя проблема в том, что логическое значение, которое сообщает, была ли нажата клавиша пробела, случайно сообщает true, когда я просто набираю случайные буквы, а затем возвращаюсь к false.
Любые новые взгляды на это будут высоко оценены! Кажется, я не могу понять, что может быть причиной этого. Заранее спасибо.
public class SpellingsClient extends Activity implements SpellCheckerSession.SpellCheckerSessionListener
{
TextWatcher tt = null;
private EditText suggestions;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
suggestions = new EditText(this);
setContentView(suggestions);
// fetchSuggestionsFor(suggestions.getText().toString());
tt = new TextWatcherExtended() {
boolean movedOn;
public void afterTextChanged(Editable s, boolean backSpace, boolean autoCorrect){
//Checks if the backspaced was pressed, sets movedOn to false if true
suggestions.setSelection(s.length());
if (backSpace){
Log.d("test2", "Backspace pressed!" + backSpace);
boolean movedOn = false;
}
Log.d("movedOn", "is " + movedOn);
movedOn = true;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){
//Checks if spacebar pressed and user moved on, then replaces the word
//if user pressed backspace, it sets the letters back to what they were
suggestions.removeTextChangedListener(tt);
if (spacePressed = true && movedOn) {
suggestions.setText(suggestions.getText().toString().replace("A", "C"));
} else if (!movedOn) {
suggestions.setText(suggestions.getText().toString().replace("C", "A"));
}
suggestions.addTextChangedListener(tt);
}
};
suggestions.addTextChangedListener(tt);
}
boolean spacePressed;
public boolean dispatchKeyEvent(KeyEvent event){
//checks if spacebar was pressed and sets spacePressed to true if so
if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE && event.getAction() == KeyEvent.ACTION_UP){
Log.d("test", "Space bar pressed!" + event);
spacePressed = true;
return true;
}
Log.d("Spacepressed", "it's" + spacePressed);
spacePressed = false;
return super.dispatchKeyEvent(event);
}
spacePressed = true
это ваша проблема. Это задание, а не сравнение.
Вместо этого используйте ==
; или, что проще, просто используйте spacePressed
, так как condition == true
то же самое, что и condition
, и позволяет избежать опечатки.