I would like an AlertDialog with an EditText field in it to accept input. This in itself is pretty straight-forward. However there are a few "obvious" features that I would like as fallout from this request. I'll take them one-by-one. I am looking for anyone that has a simpler solution to these things. I am guessing the solution is, "Write your own custom dialog you lazy bum."
AlertDialog
with an 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();
Yay, works great. It'd sure be nice if that input field got focused right away (and show the keyboard), right?
AlertDialog
with focused EditText
The following code would be after create()
and before 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);
}
});
Nice job... I guess. Now that I have this focused input it'd be nice if it respected the inputs IME option...
AlertDialog
with focused EditText
with a custom IME Option
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;
}
});
Now that's really not a great solution (repeated code) but it works...
Do people have a better way of solving this problem, or is it really that rare to ask a user for a small piece of information in a dialog, or am I just a winer and should go write my own dialog?