入力を受け入れるために、 EditText フィールドを持つ AlertDialog が必要です。これ自体は非常に簡単です。ただし、このリクエストからのフォールアウトとして希望する「明白な」機能がいくつかあります。一つ一つ持っていきます。これらのことに対するより簡単な解決策を持っている人を探しています。解決策は、「怠け者が独自のカスタムダイアログを作成する」ことだと思います。
AlertDialog
とEditText
final EditText input = new EditText(context);
final AlertDialog dlg = new AlertDialog.Builder(this).
setTitle("Title").
setView(input).
setCancelable(false).
setPositiveButton(android.R.string.ok, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle ok clicked */
dialog.dismiss();
}
}).
setNegativeButton(android.R.string.cancel, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle cancel clicked */
dialog.dismiss();
}
}).create();
dlg.show();
ええ、うまくいきます。その入力フィールドがすぐにフォーカスされる (そしてキーボードが表示される) といいですね。
AlertDialog
次EditText
のコードはcreate()
前後になりますdlg.show()
/** This requires API Level 8 or greater. */
dlg.setOnShowListener(new OnShowListener()
{
@Override
public void onShow(final DialogInterface dialog)
{
input.requestFocus();
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(input, 0);
}
});
よくやった…と思う。この焦点を絞った入力ができたので、入力IMEオプションを尊重すればいいのに...
AlertDialog
EditText
カスタム IME オプションでフォーカス
input.setImeOptions(EditorInfo.IME_ACTION_DONE);
input.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event)
{
/** Same code here that goes in the dialog.setPositiveButton OnClickListener */
dlg.dismiss();
return true;
}
});
これは本当に優れたソリューションではありませんが(コードの繰り返し)、機能します...
人々はこの問題を解決するためのより良い方法を持っていますか、それともダイアログでユーザーに小さな情報を求めることは本当にまれなのでしょうか?