我有一个AlertDialog
只需一些文字,NumberPicker
、确定和取消。
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“完成”的最佳方法通常是setOnEditorActionListener
on a TextView
。但我没有任何TextView
变量,以及NumberPicker
没有明显暴露任何TextView
,或类似的编辑器回调。 (或许NumberPicker
包含一个TextView
具有恒定的 IF 我可以搜索使用findViewById
?)
NumberPicker.setOnValueChangedListener
确实会在“完成”操作时触发,但在点击或轻拂数字列表时也会触发,这绝对不应该关闭对话框。
基于this https://stackoverflow.com/questions/3031887/how-to-catch-a-done-key-press-from-the-soft-keyboard问题,我尝试查看setOnKeyListener
,但是使用软键盘时该界面根本没有触发。这并不完全令人意外,因为KeyEvent http://developer.android.com/reference/android/view/KeyEvent.html文档表明它更多地针对硬件事件,并且在最近的 API 中,软键盘根本不会发送它们。
如何将 IME“完成”连接到对话框的“确定”操作?
编辑:从消息来源来看,NumberPicker
布局确实包含一个EditText
,但它的 id 是id/numberpicker_input
包装内com.android.internal
。使用它并不容易,而且显然是不鼓励的。但似乎只有黑客方法才能获得我想要的行为。