Я пытаюсь определить, когда средство выбора метода ввода, вызванное InputMethodManager.showInputMethodPicker()
, закрыто или изменено.Я нашел возможное решение, предложенное Шерифом эль-Хатибом, в другом вопросе: Как я могу узнать, открыт ли или нет инструмент выбора метода ввода? .Его ответ предполагает, что ОП должен использовать абстрактный нестатический класс.Однако я не знаю, как вызвать метод из абстрактного класса в статическом методе.Я решил открыть здесь отдельный вопрос, потому что исходный вопрос уже старый и неактивный.
Вот решение, представленное Шерифом:
public abstract class InputMethodActivity extends FragmentActivity {
protected abstract void onInputMethodPicked();
@Override
protected void onCreate(Bundle savedInstanceState) {
mState = NONE;
super.onCreate(savedInstanceState);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(mState == PICKING) {
mState = CHOSEN;
}
else if(mState == CHOSEN) {
onInputMethodPicked();
}
}
private static final int NONE = 0;
private static final int PICKING = 1;
private static final int CHOSEN = 2;
private int mState;
protected final void pickInput() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
mState = PICKING;
}
}
Метод, который я бы выбралнравится звонить pickInput()
, чтобы получить ответ от onInputMethodPicked()
.
Тем не менее, простой вызов pickInput();
из статического метода не работает и даже не найдет его.
Кроме того, InputMethodActivity.pickInput();
выдает ошибку " Нестатический метод 'pickInput ()' не может быть вызван из статического контекста ".
Затем я попытался создать его экземпляр, но обнаружил, что рефераты не могут быть созданы: InputMethodActivity instant = new InputMethodActivity();
выдает ошибку " 'InputMethodActivity' является абстрактным; не может быть создан ".
После дальнейшего чтения я попытался создать анонимный класс: InputMethodActivity anonym = new InputMethodActivity() {};
, но это выдает ошибку "Класс" Анонимный класс, производный от InputMethodActivity ', должен быть либо объявлен абстрактным, либо реализовать абстрактный метод' onInputMethodPicked() 'в' InputMethodActivity ' ".Я думал, что они оба уже объявлены абстрактными, поэтому я вот-вот подойду к концу своих веревок.
Проблема:
В основном, я хотел бы знать, еслиможно запустить pickInput()
в статическом методе, таком как public void onClick_TextView(View v){}
, и узнать, как этого достичь.