我有一个AlertDialog
只有一些文字,一个NumberPicker
,一个确定,一个取消。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
在TextView
上。但是我没有任何TextView
变量,并且NumberPicker
也没有显示任何TextView
或类似的编辑器回调。 (也许NumberPicker
包含TextView
以恒定的ID,我可以搜索使用findViewById
?)
NumberPicker.setOnValueChangedListener
不会被触发的“完成”的行动,但它也激发敲击或轻弹数,名单时绝对不应该关闭对话框。
根据this问题,我试着检查出setOnKeyListener
,但是在使用软键盘时该界面根本没有触发。这并不令人惊讶,因为KeyEvent
文档表明它对硬件事件的意义更大,在最近的API中软键盘根本不会发送它们。
如何将IME“完成”连接到我的对话框的“确定”操作?
编辑:从源头看,NumberPicker
布局确实包含EditText
,但其ID为id/numberpicker_input
包com.android.internal
。使用它并不容易,显然不鼓励。但似乎可能只有黑客的方式来获得我想要的行为。
您是否尝试过任何与旧版Android兼容的自定义数字选择器?我相信你可以访问他们的'EditText'编号。你可以检查这个:https://github.com/SimonVT/android-numberpicker – Naveen 2013-02-20 06:30:54