いくつAlertDialog
かのテキスト、a 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;
}
(このダイアログは、一時停止と再開の状態を保持するために必要なことをまだ実行していません。)
編集するウィジェットは1つしかないため、ソフトキーボードまたは他のIMEの[完了]アクションで、[OK]が押されたかのようにダイアログを閉じたいと思います。
IMEの「完了」を処理する最良の方法は、通常、setOnEditorActionListener
で行うことのようTextView
です。しかし、私にはTextView
変数がなく、明らかに、または同様のエディターコールバックをNumberPicker
公開していません。TextView
(たぶん、私が使用して検索できる定数IDを持つNumberPicker
が含まれていますか?)TextView
findViewById
NumberPicker.setOnValueChangedListener
「完了」アクションでトリガーされますが、番号のリストをタップまたはフリックしたときにも起動します。これにより、ダイアログが閉じられることはありません。
この質問に基づいてチェックアウトしてみましsetOnKeyListener
たが、ソフトキーボードを使用したときにそのインターフェイスがまったくトリガーされませんでした。ドキュメントではハードウェアイベント向けであることが示されているため、まったく驚くことではありませんKeyEvent
。最近のAPIでは、ソフトキーボードはそれらをまったく送信しません。
IMEの「完了」をダイアログの「OK」アクションに接続するにはどうすればよいですか?
編集:ソースの外観から、NumberPicker
レイアウトにはが含まれていますがEditText
、そのIDはid/numberpicker_input
パッケージに含まれていますcom.android.internal
。それを使用するのは簡単ではなく、明らかにお勧めできません。しかし、私が望む振る舞いを得るにはハックの方法しかないようです。