Поймать клавиатуру «Готово» для NumberPicker
у меня естьAlertDialog
только с некоторым текстом,NumberPicker
, OK и Отмена.
package org.dyndns.schep.example;
import android.os.Bundler;
import android.view.View;
import android.widget.NumberPicker;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
public class FooFragment extends DialogFragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mParent = (MainActivity) activity;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
mParent.setFoo(foo());
}
})
.setNegativeButton(android.R.string.cancel, null);
View view = getActivity().getLayoutInflater.inflate(
R.layout.dialog_foo, null);
mPicker = (NumberPicker) view.findViewById(R.id.numberPicker1);
mPicker.setValue(mParent.getFoo());
builder.setView(view);
return builder.create();
}
public int foo() {
return mPicker.getValue();
}
private MainActivity mParent;
private NumberPicker mPicker;
}
(Я знаю, что этот диалог еще не выполняет все необходимые функции, чтобы сохранить состояние «Пауза и возобновление».)
Мне бы хотелось, чтобы действие «Готово» на программной клавиатуре или в другом IME закрывало диалоговое окно, как если бы была нажата кнопка «ОК», поскольку для редактирования доступен только один виджет.
Похоже, что лучший способ справиться с IME "Готово", как правило,setOnEditorActionListener
наTextView
, Но у меня нет никакихTextView
переменная иNumberPicker
явно не подвергаетTextView
или аналогичные обратные вызовы редактора. (Может бытьNumberPicker
содержитTextView
с постоянным идентификатором я мог бы найти для использованияfindViewById
?)
NumberPicker.setOnValueChangedListener
срабатывает при действии «Готово», но оно также срабатывает при нажатии или щелчке по списку чисел, что определенно не должно закрывать диалоговое окно.
На основеэто вопрос, я пытался проверитьsetOnKeyListener
, но этот интерфейс вообще не срабатывает при использовании программной клавиатуры. Не полная неожиданность, так какKeyEvent
Документация предполагает, что она предназначена больше для аппаратных событий, а в последних API программная клавиатура их вообще не отправляет.
Как я могу подключить IME "Готово" к действию моего диалога "ОК"?
Изменить: Исходя из внешнего вида,NumberPicker
макет действительно содержитEditText
, но его идентификаторid/numberpicker_input
в упаковкеcom.android.internal
, Использовать это было бы нелегко, и это явно не рекомендуется. Но кажется, что могут быть только хакерские способы получить поведение, которое я хочу.