AlertDialog의 EditText 필드에 입력을 허용하고 싶습니다. 이것 자체는 꽤 간단합니다. 그러나이 요청으로 인해 내가 좋아할 몇 가지 "명백한"기능이 있습니다. 나는 그들을 하나씩 가져갈 것이다. 나는 이런 것들에 대한 간단한 해결책을 가진 사람을 찾고있다. 나는 해결책을 추측하고있다. "당신 자신의 커스텀 대화 상자를 게으른 부랑자를 써라." EditText
EditText가있는 AlertDialog의 더 나은 솔루션
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
와
AlertDialog
다음 코드는 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
... 좋은 것 즉 정말 대단한 아니라 이제 사용자 정의 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;
}
});
와 EditText
집중 솔루션 (반복 코드)하지만 작동 ...
사람들이이 문제를 해결하는 더 좋은 방법을 가지고 있습니까? 아니면 대화 상자에서 작은 정보를 묻는 것이 정말 드뭅니다. 우승자는 내 대화를 써야합니까?
모든 반복 코드를'setUpImeDialog (AlertDialog dlg, EditText input) {...}'와 같은 메소드로 옮기지 않는 이유는 무엇입니까? – Eric
@ Eric 분명히 그렇습니다. 아직 완성 된 IME 이벤트와 클릭 확인 요청을 수신 대기해야한다는 점이 이상적입니다. – xbakesx
예, IME 이벤트로 클릭을 트리거 할 수 있습니다. 이렇게 :'dlg.getButton (DialogInterface.BUTTON_POSITIVE) .performClick();'. 여전히 2 차 행사이지만 반복되는 코드는 피할 수 있습니다. (이것이 원하는 것이라면 대답으로 추가 할 수 있습니다.) – Eric